Sqler에 있는 질문에 대해 풀어봤다.
문제1 ) http://www.sqler.com/827048#4
/* 100000과 가장 가까운 근사치값을 구할때 */
select n, v, abs( v - 100000 )
from (
values
(1, 1000 ),
(2, 2300 ),
(3, 1000 ),
(4, 5000 ),
(5, 16000 ),
(6, 54000 ),
(7, 8200 ),
(8, 1500 ),
(9, 2555 )
) as tb( n, v )
order by 3
이렇게 하면 가장 가까운게 위로 올라온다.
문제2 ) http://www.sqler.com/bSQLQA/827651
피봇으로 데이타를 만들때 내부 데이타가 집계가 아닌 실제 원소데이타를 포함하도록 뿌려달라는 것 같다.
declare @ttb table
(
TESTBENCH int,
TESTWEEK varchar(100),
TESTNAME varchar(100)
)
insert into @ttb
select *
from
(
values
(1, 'W1618.1', 'TEST1'),
(1, 'W1618.1', 'TEST2'),
(1, 'W1618.1', 'TEST3'),
(1, 'W1618.2', 'TEST1'),
(1, 'W1618.3', 'TEST2'),
(2, 'W1618.2', 'TEST1'),
(2, 'W1618.2', 'TEST3'),
(2, 'W1618.3', 'TEST2'),
(2, 'W1618.4', 'TEST2'),
(2, 'W1618.4', 'TEST3')
) as tb (TESTBENCH, TESTWEEK, TESTNAME )
declare @TESTBENCH int
declare @W1 varchar(100), @W2 varchar(100), @W3 varchar(100), @W4 varchar(100)
declare @result table
(
TESTBENCH int,
[W1618.1] varchar(100),
[W1618.2] varchar(100),
[W1618.3] varchar(100),
[W1618.4] varchar(100)
)
declare rst cursor
for
select TESTBENCH, [W1618.1], [W1618.2], [W1618.3], [W1618.4]
from @ttb
pivot
(
count( TESTNAME ) for TESTWEEK in ( [W1618.1], [W1618.2], [W1618.3], [W1618.4] )
) as p
OPEN rst
FETCH NEXT FROM rst
INTO @TESTBENCH, @W1, @W2, @W3, @W4
WHILE @@FETCH_STATUS = 0
BEGIN
select @W1 = '', @W2 = '', @W3 = '', @W4 = ''
select @W1 += TESTNAME + char(10)
from @ttb
where TESTBENCH = @TESTBENCH
and TESTWEEK = 'W1618.1'
select @W2 += TESTNAME + char(10)
from @ttb
where TESTBENCH = @TESTBENCH
and TESTWEEK = 'W1618.2'
select @W3 += TESTNAME + char(10)
from @ttb
where TESTBENCH = @TESTBENCH
and TESTWEEK = 'W1618.3'
select @W4 += TESTNAME + char(10)
from @ttb
where TESTBENCH = @TESTBENCH
and TESTWEEK = 'W1618.4'
insert into @result
select @TESTBENCH, @W1, @W2, @W3, @W4
FETCH NEXT FROM rst
INTO @TESTBENCH, @W1, @W2, @W3, @W4
END
CLOSE rst;
DEALLOCATE rst;
select *
from @result
커서를 이용하면 되긴 하는데 고정 컬럼으로 만들었을때 위와 같고, 가변적으로 해야 할때는 부분부분 function으로 동작할수 있게 하고 줄여서
동적 쿼리로 만들어주면 된다.
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
sqler에 올라온 질문글... (0) | 2016.09.12 |
---|---|
Sqler에 있는 질문에 대해 풀어봤다. (0) | 2016.05.20 |
Sqler에 있는 질문에 대해 풀어봤다. (0) | 2016.05.11 |
경고: 집계 또는 다른 ... 어쩌고 저쩌고 (0) | 2016.02.17 |
MS-SQL] 코드트리 + 상세내역에 코드별 합계쿼리. (0) | 2013.02.26 |
개발자 커뮤니티가 썰렁해...
음... 닷넷개발 커뮤니티
훈스 : www.hoons.kr 은 보고 있지만 질문글과 답글정도 간간히 올라오는 듯하고,
sqler : http://www.sqler.com/ 은 db쪽만 겨우 질문글과 답글정도이고...
자바
okky : okky.kr 은 그나마... 사람들 얘기가 올라오긴 한데... 뭐랄까?...
이런 얘기들??
- 이회사 어떼요? ( 입사예정이거나 다니고 있는데 맘에안드는 듯... )
- A사 vs B회사 어디로 갈까요? ( 둘다 합격했거나, 한쪽에서 일하다가 다른쪽으로 이직하려는데...)
- 신입인데 어떻게 하나요?( 내용은 혼자 독박쓰고 일함... )
- 기타...
태요나 devpia는 잘 안가서 pass~ ( 데브피아는 가봤는데 썰렁함... )
전체적으로 조용한듯함...
그나저나... 신입이 모든 일을 도맡아 하고 있다는 듯한 글들을 보면
개발자분들의 답변이 대부분 "도망가라...", 사수가 없다. "도망가라..."
사수없으면 힘든부분도 있지만 대책없는 사수 만나면 더 힘들기도 한데...
남의 인생에 관심은 꺼야지... 각자의 삶이 있고, 방법도 책임도 자기가 지는 거니까!
5월 슬럼프는 대략 넘겨봐야지...
살기 위해 운동하자!! 헛둘 헛둘..
'--- 취미 > 생각하기' 카테고리의 다른 글
1박2일에 나온 내가 살던 섬 '율도' (0) | 2016.05.29 |
---|---|
요샌 좀 한간하네?? (0) | 2016.05.21 |
음... 더 만들게 없네? (0) | 2016.05.05 |
20대 국회의원 선거... (0) | 2016.04.16 |
가르쳐 본다는 것... (0) | 2016.01.05 |
Sqler에 있는 질문에 대해 풀어봤다.
세번째 풀이
sqler를 들려보니 각 일별로 분을 만든게 떠있네? 음...
그래서 다시 만들어봤다. 1시간 소요 ㅠㅠ... 만들어 놓은걸 안보고 해봤음. ( 보고 싶은 유혹이... )
역시나 아직 내가 놓치는 부분들이 있네.
;with ttb as
(
select DATEADD( HOUR, -8, convert( datetime, st )) as st, DATEADD( HOUR, -8, convert( datetime, ed)) as ed
from
(
values
( '2016-05-09 09:00:00', '2016-05-09 09:30:00' ),
( '2016-05-09 23:00:00', '2016-05-10 09:00:00' ),
( '2016-05-10 22:20:00', '2016-05-11 05:00:00' ), -- 테스트를 위해 추가.
( '2016-05-12 22:20:00', '2016-05-15 05:00:00' ) -- 테스트를 위해 추가.
) as tb ( st, ed)
/* 문제 :
이와같은 데이터가 있을때 합산하는 시점은 오전 08시로 기준을 잡고
2016-05-09 : 570분 (9:00 ~ 09:30 = 30분 + 23:00 ~ 익일 08:00 = 540분)
2016-05-10 : 60분 (기준시간 08:00~ 09:00 = 60분)
이렇게 SELECT 를 하고싶은데요.. 너무헷갈립니다 고수분들 조언부탁 드립니다.
*/
), otb ( st, ed )
as
(
select DATEADD( hour, -8, convert( datetime, st )) as st,
DATEADD( hour, -8, convert( datetime, ed )) as ed
from ttb
)
, rtb ( diff, dt )
as
(
select DATEDIFF( day, min( st ), max( ed ) ) as diff, convert( datetime, convert( varchar(10), min( st ), 121 )) as dt
from otb
)
, jtb ( dt1 , dt2)
as
(
select DATEADD( Day, number, dt ) as dt1, dateadd( MILLISECOND, -2, DATEADD( Day, number + 1, dt )) as dt2
from rtb, (
select number
from master.dbo.spt_values
where name is null ) as ntb
where ntb.number <= rtb.diff
)
select dt1, dt2, case when st is null then 0
else
case when dt1 <= st then st else dt1 end
end as st
, case when ed is null then 0
else case when ed < dt2 then ed else dt2 end
end as ed,
datediff( MINUTE,
case when st is null then 0
else
case when dt1 <= st then st else dt1 end
end,
case when ed is null then 0
else case when ed < dt2 then ed else dt2 end
end )
as diff
from jtb
left
outer join otb
on ( otb.ed > jtb.dt1 and otb.st < jtb.dt2 )
/###############################################################################/
아래가 문제인데...
08시를 기준으로 시작시간, 종료시간 분(시간) 구하기.
우선 급한데로 풀이를 한다면... 아래처럼 구해보겠다. 테스트 까지 1시간 조금 안걸린듯....
첫번째 풀이
;with ttb as
(
select convert( datetime, st ) as st, convert( datetime, ed) as ed
from
(
values
( '2016-05-09 09:00:00', '2016-05-09 09:30:00' ),
( '2016-05-09 23:00:00', '2016-05-10 09:00:00' ),
( '2016-05-10 22:20:00', '2016-05-11 05:00:00' ) -- 테스트를 위해 추가.
) as tb ( st, ed)
/* 문제 :
이와같은 데이터가 있을때 합산하는 시점은 오전 08시로 기준을 잡고
2016-05-09 : 570분 (9:00 ~ 09:30 = 30분 + 23:00 ~ 익일 08:00 = 540분)
2016-05-10 : 60분 (기준시간 08:00~ 09:00 = 60분)
이렇게 SELECT 를 하고싶은데요.. 너무헷갈립니다 고수분들 조언부탁 드립니다.
*/
)
select dt, sum( case when m > 0 then m else 0 end) as sum_m
from
(
SELECT convert( varchar(10), st, 121) as dt,
case when DATEDIFF( DAY, st, ed ) > 0 and CONVERT( datetime, CONVERT( varchar(10), ed , 112) + ' 08:00:00' ) < ed then DATEDIFF( MINUTE, st, CONVERT( datetime, CONVERT( varchar(10), ed , 112) + ' 08:00:00' ) )
else DATEDIFF( MINUTE, st, ed)
end as m
FROM ttb
UNION ALL
SELECT convert( varchar(10), ed, 121) as dt,
DATEDIFF( MINUTE, CONVERT( datetime, CONVERT( varchar(10), ed , 112) + ' 08:00:00' ), ed ) as m
FROM ttb
WHERE DATEDIFF( DAY, st, ed ) > 0 and CONVERT( datetime, CONVERT( varchar(10), ed , 112) + ' 08:00:00' ) < ed
) s
group by dt
두번재 풀이 ( 10분만에 썼음. )
위 식에서 다음날 08시 기준이니까 -8시간 하면 00시 정각이 되니 이것으로 시간을 구함.
;with ttb as
(
select DATEADD( HOUR, -8, convert( datetime, st )) as st, DATEADD( HOUR, -8, convert( datetime, ed)) as ed
from
(
values
( '2016-05-09 09:00:00', '2016-05-09 09:30:00' ),
( '2016-05-09 23:00:00', '2016-05-10 09:00:00' )
-- ( '2016-05-10 22:20:00', '2016-05-11 05:00:00' ) -- 테스트를 위해 추가.
) as tb ( st, ed)
/* 문제 :
이와같은 데이터가 있을때 합산하는 시점은 오전 08시로 기준을 잡고
2016-05-09 : 570분 (9:00 ~ 09:30 = 30분 + 23:00 ~ 익일 08:00 = 540분)
2016-05-10 : 60분 (기준시간 08:00~ 09:00 = 60분)
이렇게 SELECT 를 하고싶은데요.. 너무헷갈립니다 고수분들 조언부탁 드립니다.
*/
)
select dt, sum( case when m > 0 then m else 0 end) as sum_m
from
(
select convert( varchar(10), st, 121) as dt, DATEDIFF( MINUTE, st, ed ) - case when DATEDIFF( DAY, st, ed ) >= 1 then DATEDIFF( MINUTE, CONVERT( datetime, CONVERT( varchar(10), ed , 112) + ' 00:00:00' ), ed ) else 0 end as m
from ttb
union all
select convert( varchar(10), ed, 121) as dt, DATEDIFF( MINUTE, CONVERT( datetime, CONVERT( varchar(10), ed , 112) + ' 00:00:00' ), ed )
from ttb
where DATEDIFF( DAY, st, ed ) > 0
) s
group by dt
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
Sqler에 있는 질문에 대해 풀어봤다. (0) | 2016.05.20 |
---|---|
Sqler에 있는 질문에 대해 풀어봤다. (0) | 2016.05.13 |
경고: 집계 또는 다른 ... 어쩌고 저쩌고 (0) | 2016.02.17 |
MS-SQL] 코드트리 + 상세내역에 코드별 합계쿼리. (0) | 2013.02.26 |
MS-SQL] sp_helptxt 만들기... (0) | 2012.11.22 |
음... 더 만들게 없네?
흠... addins도 필요한걸 다 만들고 나니... 더 만들것이 없네??
'--- 취미 > 생각하기' 카테고리의 다른 글
요샌 좀 한간하네?? (0) | 2016.05.21 |
---|---|
개발자 커뮤니티가 썰렁해... (0) | 2016.05.11 |
20대 국회의원 선거... (0) | 2016.04.16 |
가르쳐 본다는 것... (0) | 2016.01.05 |
pc가 자다가 깨는 현상... 제거 (0) | 2015.12.25 |
Visual Studio AddIns 개발
# SSMS 는 필요한 기능은 일단 구현이 되었고...
+ Object Find
+ SP, Function, View의 정의된 쿼리를 새 텍스트 창에 보여주기. ( 솔루션에서 찾아서 수정 누르기 귀찮음! 또 일일이 필터링 걸기 귀찮음... )
+ 객체명 더블클릭하면 솔루션 탐색기에서 해당 오브젝트를 찾아 선택해줌.
# Visual Studio는 마땅히... 고민할 게 없었는데... 뭐 일단 굿센용 프로젝트 중에 귀찮은 작업하나를 깔끔하게 해결할수 있는 모듈을 만들었다.
+ 프로젝트 셋팅 ( 기존에 만들어져 있던 소스 내려받아서 열었을때 - 로컬 작업환경이 안맞는 상태에서 )
: 참조된 dll 을 서버에서 내려받아서 지정된 위치에 덮어쓰기!
: 특정 어셈블리위치를 갱신해주기 ( WPF디자이너 오류 떨어져서 처음 프로젝트를 열었을때 링크를 다시 잡아줘야 되는 현상 )
<< 프로젝트에서만 나타나는 메뉴임 >>
SSMS 이미지는 나중에 다시 올려야지...
개발을 하다가 귀찾고 손이 많이 가는 작업들에 대해 위와 같이 AddIns 만들어두면 별도의 폼을 안띄워도 되니까!!!
내가 사용하는 프로그램들이 서너개 정도 각각 띄웠는데 두개는 이제 안써도 된다.
음 Xaml 정렬하는 거나 따로 붙여놓을까나... 음...
----------------------------------------------------------------------------
xaml 정렬하는 것 붙였다.
셋팅용 Form도 붙였다.
: 각 dll별로 붙일수 있게 하고, 프로젝트 참조된 것도 dll을 찾아서 다운 가능하도록 만들어두었다.
dll이 Target Path에 없으면 DN버튼 앞에 에러마크 아이콘이 뜬다.
'# 9) My Program(.NET)' 카테고리의 다른 글
상세화면 관련 소스 생성기 (0) | 2016.06.08 |
---|---|
Visual Studio AddIns] Code Tip History (0) | 2016.06.03 |
작업이력관리툴 ~!!] 수정 (3) | 2015.10.10 |
PGMMNG] DataGrid 소스 제너레이터? (0) | 2015.10.01 |
SQL_FMT] 요소들을 분해!! (0) | 2015.09.09 |
JSFW.SQLFormatter] AddIns 추가적으로 알아낸것...
## 실행할때 ...
textDoc.DTE.ExecuteCommand("Query.Execute");
실행은 안해봤고... SendKeys.Send( ... ) 로 하면 된다.
## 현재 로그인정보 ... ( 추후에 직접 sql 쿼리나 시스템 뷰를 이용해서 뭔가 만들때 필요할 듯 하다. )
VSIntergration.dll삭제, SqlPackageBase.dll이 4.0 런타임 이므로 프로젝트 자체를 4.0으로 변경.
var conn = ServiceCache.ScriptFactory
.CurrentlyActiveWndConnectionInfo
.UIConnectionGroupInfo;
textDoc.Selection.NewLine();
textDoc.Selection.Insert( string.Format("S:{0},U:{1},P:{2},D:{3}",
conn[0].ServerName,
conn[0].UserName,
conn[0].Password,
conn[0].AdvancedOptions[6] ), 0);
## 솔루션과 선택된 노드와 에디터 연계 ...
/*
// Nuget 패키지관리자 ( 콘솔 ) : Install-Package VSSDK.Shell.10
// Shell.10.dll이 필요해서 구글링.
// : ServiceProvider
*/
IObjectExplorerService objExplorer = ServiceCache.ServiceProvider.GetService(typeof(IObjectExplorerService)) as IObjectExplorerService;
// 솔루션 탐색기에서 선택된 것 ...
int selectedNodeCount = 0;
INodeInformation[] selectedNodes = null ;
objExplorer.GetSelectedNodes( out selectedNodeCount, out selectedNodes );
// DB정보 : Server[@Name='DB-SVR']/Database[@Name='TabeName']
// 테이블 : Server[@Name='DB-SVR']/Database[@Name='DBName']/Table[@Name='TabeName' and @Schema='dbo']
INodeInformation findNode = objExplorer.FindNode(
"Server[@Name='DB-SVR']/Database[@Name='DBName']/Table[@Name='TabeName' and @Schema='dbo']");
// 테스트 아직 로딩 안된 객체 선택! ( 찾아감 )
objExplorer.SynchronizeTree( findNode );
*** 이거 쉽지 않더라.
우선 SQL Server 버젼이 2014! AddIn 만드는것은 VS2013 Community로 .Net 4.0, SqlFormatter는 .NET 3.5
구글링을 해도 대부분 2008버젼, 또는 2012가 있긴한데... 영어해석이 안되서 그런건지... 번역기돌려서 그런지...
참조된 dll경로도 인터넷 글과 조금씩... ( 많이 다르면 다른 글을 봤을텐데... ) 다르다.
참고사항으로 아래 project파일의 참조 링크경로를 복사해둔다.
<Reference Include="Extensibility, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<EmbedInteropTypes>False</EmbedInteropTypes>
</Reference>
<Reference Include="Microsoft.SqlServer.RegSvrEnum, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\Program Files\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.RegSvrEnum.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.OLE.Interop, Version=7.1.40304.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<HintPath>..\packages\VSSDK.OLE.Interop.7.0.4\lib\net20\Microsoft.VisualStudio.OLE.Interop.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.VisualStudio.Shell.10.0, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\VSSDK.Shell.10.10.0.4\lib\net40\Microsoft.VisualStudio.Shell.10.0.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="ObjectExplorer">
<HintPath>..\..\..\..\..\..\..\Program Files\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\ObjectExplorer.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="SQLEditors">
<HintPath>..\..\..\..\..\..\..\Program Files\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\Extensions\Application\SQLEditors.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="SqlPackageBase, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\..\..\..\..\..\..\Program Files\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\SqlPackageBase.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="SqlWorkbench.Interfaces">
<HintPath>..\..\..\..\..\..\..\Program Files\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\SqlWorkbench.Interfaces.dll</HintPath>
<Private>True</Private>
</Reference>
구글링해도 자세한건 대부분 영어라 찾기 어렵다. 한글이 없네...
# VS AddIns 만들면서
- 솔루션탐색기에서 프로젝트에 Context Menu를 띄울때.
CommandBars cBars = (CommandBars)_applicationObject.CommandBars;
CommandBar vsBarProject = cBars["Project"];
commandProjectSettings.AddControl(vsBarProject, 1);
- 솔루션탐색기에서 특정 파일에 대해 Context Menu를 띄울때
CommandBar vsBarFile = cBars["Item"];
* Status 설정할때
UIHierarchy UIH = _applicationObject.ToolWindows.SolutionExplorer;
SelectedItem SelectItem = _applicationObject.SelectedItems.Item(1);
if (SelectItem != null)
{
if (Path.GetExtension(SelectItem.Name) == ".xaml") //확장자가 .xaml일때 메뉴가 뜸.
{
Status = 지원, 활성화;
}
}
- 솔루션 탐색기에서 선택된 항목에 대한 실제 파일 경로를 가져올때.
UIHierarchy UIH = _applicationObject.ToolWindows.SolutionExplorer;
Array SelectItems = (Array)UIH.SelectedItems;
if (SelectItems != null)
{
foreach (UIHierarchyItem item in SelectItems)
{
ProjectItem prj = item.Object as ProjectItem;
string projectName = prj.ContainingProject.Name;
string projectPath = "" + prj.Properties.Item("FullPath").Value; // 경로
}
}
'# 9) My Program(.NET) > PRJMNG' 카테고리의 다른 글
JSFW.UI Story Board] 업데이트 및 기타 정리 (0) | 2016.06.22 |
---|---|
JSFW.UI Story Board] 컨트롤 갯수 제한에 걸림. (0) | 2016.06.05 |
JSFW.SQLFormatter] Addin... 부착 (0) | 2016.04.21 |
JSFW.Report Tools] 시작해볼까? (0) | 2016.04.20 |
JSFW.SQLFormatter] 수정작업 * 중요 (0) | 2016.04.19 |
JSFW.SQLFormatter] Addin... 부착
워... 드디어 성공했다. 썩을 편집기에 붙여넣는게 더 어려웠다.
편집기에서 쿼리를 선택해서 단축키를 통해 addin된게 바꿔준다.
참고 링크에 apexsql reflect 라는 sql formatter가 있는데 이거 free무료라고 되있어서 다운 받고 설치해서 이거 저거 돌려봤는데...
콤마위치나 문법체크해서 틀리면 변환을 안해준다. 에러 떨궈버림... 그외 많은 링크들을 봤지만... 여기 part 1, 2, 3과 몇개 글을 보면 된다.
조금 대략적으로 기억나는데로 써놓자.
Visual Studio 2013 Community 에서 AddIns를 개발하려면...
프로젝트에 확장성 > AddIns 프로젝트가 나타나야 되는데 없다!
https://www.visualstudio.com/downloads/download-visual-studio-vs
여기서... 2013용 도구 > 2013 SDK 다운로드!
설치...
대략 집에서도 30분 정도...
New Project에서 확장성 > AddIn 선택
= JSFW.AddIns 이름 지정.
위자드가 뜸.
... 스샷 6개.
스샷에서 4번째에서 두번째 체크박스(I would like .. )를 체크 하면 아래 Connection.cs 에서
OnConnection의 구현부는 딱히 수정하지 않아도 우선 뜸.
- 추가적으로 Command 아이디와 버튼텍스트, 툴팁 정도만 수정하면 됨.
그리고 Exe( ) 메서드 본문을 작성.
프로젝트 생성이 끝나면
dll참조 : 설치된 SSMS 위치에 찾아가서... 2014버젼이라 120에 있었는데..
Microsoft\MicroSoft SQL Server\120\tools\binn\ dll들이 있다. (binn맞음)
- SQLEditors
- SqlPackageBase
- SqlWorkbench.Interfaces
생성된 프로젝트에서 Connect.cs 파일에서
## using문
using System.Collections.Generic;
using System.Linq;
using System.Resources;
using System.Reflection;
using System.Globalization;
using System.Windows.Forms;
using Microsoft.SqlServer.Management.UI.VSIntegration;
using Microsoft.SqlServer.Management.UI.VSIntegration.Editors;
using Microsoft.SqlServer.Management.QueryExecution;
using Microsoft.SqlServer.Management.SqlMgmt;
using Microsoft.VisualStudio.CommandBars;
using JSFW.NEWFMT;
## OnConnection 구현 : 위 내용.
## Exec 구현 : 지정된 명령이 실행될때!!!
여기선 에디터에서 선택된 쿼리정보를 가져와서 재정렬 한 후 가져온 곳에 덮어씌워주면 된다.
try
{
//열려진 문서의 인스턴스를 취득해서
TextDocument textDoc = (TextDocument)_applicationObject.ActiveWindow.Document.Object("TextDocument");
if (textDoc != null)
{
textDoc.StartPoint.CreateEditPoint();
string currentSelectedQuery = textDoc.Selection.Text;
//커맨드를 삽입하고
if (string.IsNullOrEmpty(currentSelectedQuery) == false)
{
currentSelectedQuery = Exec_Formatter(currentSelectedQuery);
textDoc.Selection.Insert(currentSelectedQuery, (int)vsInsertFlags.vsInsertFlagsContainNewText);
}
}
}
catch (Exception exx)
{
System.Windows.Forms.MessageBox.Show(exx.Message);
}
Exec_Formatter() 는 쿼리 정렬 메서드.
여기서 Insert 에서 시간을 많이 잡아먹었다.
붙여 넣었더니 정렬된 쿼리가 이상한 모양으로 ~~~!
클립보드에 붙였다가 textDoc.Paste() 호출하니 잘 붙긴하더라... 원하던 기능이 아니므로 최후에 하기로 남겨두고
방법을 찾다가... 결국엔 찾았다.
AddIns 파일을 수정하고 빌드 정해진 AddIns폴더에 두고 SSMS를 켜주면 도구메뉴 밑에 만들어둔 버튼명이 있다.
이걸 옵션가서 원하는 단축키로 만들어주고, 쿼리 대충 하나 불러놓고 선택한 후 단축키를 딱!!!! 결과 확인!
AddIns 수정과 설치하는 방법은 좀더 공부와 삽질을 해야 된다. ( Poor Sql formatter 소스보고 공부 중.. .)
영어가 안되서... 많이 힘들다.
#바꾸기 전
# 바꾼 후
아싸~~
AddIns 되니까. 흐흐흐.... 뭔가 더 바꿔볼 수 있게 되었다. +_+;;
짜놓은 프로그램들 비쥬얼스튜디오에 추가하면 일일이 따로 안 띄워도 되고 복사해서 붙여넣기 안해도 되공...
'# 9) My Program(.NET) > PRJMNG' 카테고리의 다른 글
JSFW.UI Story Board] 컨트롤 갯수 제한에 걸림. (0) | 2016.06.05 |
---|---|
JSFW.SQLFormatter] AddIns 추가적으로 알아낸것... (0) | 2016.04.22 |
JSFW.Report Tools] 시작해볼까? (0) | 2016.04.20 |
JSFW.SQLFormatter] 수정작업 * 중요 (0) | 2016.04.19 |
JSFW.SQLFormatter] 2차 작업 완료. (0) | 2016.04.16 |
JSFW.Report Tools] 시작해볼까?
작업을 하다보면 리포트관련 폼을 만들때 너무 어렵다. 선그리고 일일이 지정하고...
거창한 툴을 만들고 싶은건 아니다.
엑셀을 드로잉 도구로 사용하고 엑셀을 받아서 리포트 구성을 마치고, 프린트가 가능하다면???
첫번째, 두번째까지는 이미 만들어둔 것이 있다. 리포트 구성을 끝내고 이 소스는 프린트를 해주는게 아닌
엑셀에 담는 소스를 만들어서 클립보드에 붙여주는 ...
머리속에 있는 것들을 대충 메모장에 순서대로 정리해서 관련 된 것들을 나열해보니, 될것 같다!
> 고민 고민 하면서 여러가지 상황을 고려해보니... 다른거 하는게 남는 거라고 생각된다.
> 리포트 양식이란게 워낙 여러가지고 마스터 디테일... 예외 상황들 처리하다가 몇년 훌쩍 가겠다.
> 어차피 리포트 많이 그리지도 않는데... 다른데 시간을 쓰자.
리포트툴을 사용했던 경험들을 되새겨서 좀 더 편하게 리포트를 그리고 만들수 있는 방법들을
정리해봤고, 프린트 하는 소스를 샘플구현해서 띄웠더니 어렵지않게 나오긴 했다.
예외 처리를 어떻게 하느냐. 또 직접 그려보니 단위가 다르던데... 이걸 맞춰서 보기 좋게 꾸미려면
좀 긴작업이 될듯 하다.
아주 작은 기능으로 우선 리포트 프린트 하고 추가적인 기능들도 고려해봐야지...
우선 쿼리 포맷터를 마무리 하고....
'# 9) My Program(.NET) > PRJMNG' 카테고리의 다른 글
JSFW.SQLFormatter] AddIns 추가적으로 알아낸것... (0) | 2016.04.22 |
---|---|
JSFW.SQLFormatter] Addin... 부착 (0) | 2016.04.21 |
JSFW.SQLFormatter] 수정작업 * 중요 (0) | 2016.04.19 |
JSFW.SQLFormatter] 2차 작업 완료. (0) | 2016.04.16 |
JSFW.SQLFormatter] 1차 작업 완료. (0) | 2016.04.13 |
JSFW.SQLFormatter] 수정작업 * 중요
자고 아침에 일어나서 생각이 난게... 괜한짓 같다는 걸 느끼고
주석문 일체 삭제하는 것으로 방향을 잡았음.
있는 주석 유지하느라 포멧 지정하는 소스가 더 지저분해지는 것을 방지하고,
정말 긴... 쿼리문에 주석을 내가 더 쉽게 달수 있는 기능을 넣어주면 되니까.
있는 주석들 정렬하기도 번거롭고...
실제 쿼리들로 테스트 한 결과는 만족!!
텍스트박스가 아닌 RichTextBox로 컬러를 넣을까?... 아니면 add을 구현해서
mssql에 붙여버릴까...
------------------------------------------------------------------------------------------
수정사항이 생겼다.
1. 콤마위치와 주석문 사이에서 오락가락...
: 디버깅이 쉽지 않네.. 앞에 뒀다 뒤에 뒀다...
: 더 복잡해지면.. 그냥 프로시져 앞에 배치된 주석 빼고 제거 해야겠네!!!
select col1, /*aa*/ col2 as c2 /*aaa*/, col3 c3 from TB00 a
where a.KEY = @a
order by col1, /*oa*/ col2 /*oaa*/, col3
이런 쿼리가 있을때!!!
*** 콤마 위치가 중요함.
select col1, /*aa*/ 주석문 앞에...
col2 as c2 /*aaa*/, 주석문 뒤에...
col3 c3
양쪽 모두 동일하게 배치되도록 수정하였다.
order by, group by 역시 동일하다.
# 앞으로 배치
SELECT col1/*aa*/
,col2 AS c2/*aaa*/
,col3 c3
FROM TB00 a
WHERE a.KEY = @a
ORDER BY col1/*oa*/
,col2/*oaa*/
,col3
# 뒤로 배치
SELECT col1,/*aa*/
col2 AS c2,/*aaa*/
col3 c3
FROM TB00 a
WHERE a.KEY = @a
ORDER BY col1,/*oa*/
col2,/*oaa*/
col3
2. 엄청 긴 쿼리를 생각 못했다. textbox에서 maxlength에서 짤리더라.
그래서 클립보드에서 긁어서 길이보다 넘는것은 maxlength 를 재설정.
'# 9) My Program(.NET) > PRJMNG' 카테고리의 다른 글
JSFW.SQLFormatter] Addin... 부착 (0) | 2016.04.21 |
---|---|
JSFW.Report Tools] 시작해볼까? (0) | 2016.04.20 |
JSFW.SQLFormatter] 2차 작업 완료. (0) | 2016.04.16 |
JSFW.SQLFormatter] 1차 작업 완료. (0) | 2016.04.13 |
JSFW.SQLFormatter] 괄호, Case문 그리고 BEGIN (0) | 2016.04.12 |
20대 국회의원 선거...
오늘은 세월호2주년. 가슴 먹먹한 너무 안타까운 일이 있었다. ㅠㅠ...
이번 선거 야당쪽이 우세해서 좋은데 조금 찜찜한 부분이 있다.
지금까지 해왔던 대로 새누리는 조금 위험하다 싶어서 조금 물러선 전략이 아닐까?
그리고 위험해진 책임을 회피하고 야당쪽으로 책임 전가하고 언론을 통해 야당에 책임 몰빵하고
대선까지 이끌어 가려는 게 아닐까?
정치적으로 어떤 국회의원이 무슨일을 어떻게 하는 지는 솔직히 잘 모르겠다.
다만 함께 잘 살아가게끔 만드는 정책들이 아닌 새로운 계급 사회를 고착화 시켜가도록 하게끔
만드는 환경을 만들어가는 부분은 새누리가 주도해서 가고 있지 않은가?
그런 생각들을 가지고 정치뉴스들을 보고 있지만
오늘 김어준 파파이스를 보니 김갑수 문화평론가 라는 사람이 나와서
딱 그 내용들을 얘기하더라.
http://www.hanitv.com/?mid=tv&category=52596
정치도 관심을 가져야 하는 것 같다.
이해가 안되는 결과는 안산 단원 .... 왜? 대체 왜?
'--- 취미 > 생각하기' 카테고리의 다른 글
개발자 커뮤니티가 썰렁해... (0) | 2016.05.11 |
---|---|
음... 더 만들게 없네? (0) | 2016.05.05 |
가르쳐 본다는 것... (0) | 2016.01.05 |
pc가 자다가 깨는 현상... 제거 (0) | 2015.12.25 |
훈스를 탈퇴! (0) | 2015.09.29 |