2014년 6월 23일 월요일
2014년 6월 16일 월요일
SSIS UNZIP TASK
Executable : unzip.exe
Arguments : "D:\unzip.exe " -o "C:\zipFilePath\file.zip" -d "D:\unzipFolderPath\"
폴더명에 공백이 포함된 경우 Double Quotation 으로 묶어줘야 하며
Argument 값에 에서 Double Quotation은 \" 으로 입력한다.
OPENQUERY INSERT/UPDATE/DELETE
-- update
UPDATE OPENQUERY(LINKED1, 'SELECT SSN FROM TESTLINKED WHERE SSN=2')
SET SSN=SSN + 1
-- insert
INSERT OPENQUERY(LINKED1, 'SELECT SSN FROM TESTLINKED WHERE 1=0') VALUES (1000)
-- delete
DELETE OPENQUERY(LINKED1, 'SELECT SSN FROM TESTLINKED WHERE SSN>100')
SQL Server 에 접속되어 있는 IP 찾기
DMBS에서 CMD 명령어를 사용하기 위해 cmdshell을 활성화 하는 것은 보안상 취약 할 수 있으므로
주의가 필요함.
-----------------------------------------
-- cmdshell Option Enable
sp_configure 'show advanced options', 1
RECONFIGURE
sp_configure 'xp_cmdshell', 1
RECONFIGURE
------------------------------------
--- Create Procedure
CREATE PROCEDURE usp_getboundAddresses
AS
BEGIN
SET NOCOUNT ON
IF OBJECT_ID('tempdb..#SomeTable') IS NULL
CREATE TABLE #SomeTable
(
ShellOutput VARCHAR(500)
)
INSERT INTO #SomeTable
EXEC xp_cmdshell 'nbtstat -a .'
SELECT
SUBSTRING( ShellOutput,
CHARINDEX('[',ShellOutput)+1,
-- LEN(ShellOutput) - CHARINDEX(']',ShellOutput) -2 --(EN)
LEN(ShellOutput) - CHARINDEX(']',ShellOutput) + 1 --(KR)
) AS BoundAddress
from #SomeTable
-- WHERE ShellOutput LIKE '%Node IpAddress%' --the important lines(EN)
WHERE ShellOutput LIKE '%노드 IpAddress%' --the important lines(KR)
AND ShellOutput NOT LIKE '%0.0.0.0%' --Unassigned addresses
DROP TABLE #SomeTable
END
------------------------------------------
-- Execute Procedure
exec usp_getboundAddresses
------------------------------------------
-- Result
Could not continue scan with NOLOCK due to data movement
에러 메세지 :
Msg 601, Level 12, State 2, Line 8
데이터 이동으로 인해 NOLOCK으로 계속 검색할 수 없습니다.
영문 : Could not continue scan with NOLOCK due to data movement
해결 : Index Rebuild 후 다시 쿼리 실행.
SQL Server 버전 정보 확인
SSMS UI 내에서도 확인 가능하겠지만,
쿼리로도 조회 가능.
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
쿼리로도 조회 가능.
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
제품버전 제품수준 에디션
결과 : 10.0.1600.22 RTM Enterprise Edition
SQL Server 에러번호로 에러메세지 확인하기
SELECT * FROM MASTER.SYS.MESSAGES WHERE MESSAGE_ID = 8630 AND LANGUAGE_ID = 1042
결과 : 8630 1042 17 0 내부 쿼리 프로세서 오류: 쿼리 프로세서 실행 중 오류가 발생했습니다.
Windows Server 2008에 SQL Server 2008 설치시 에러
증상
서버 로그인시 초기 구성 작업 창이 뜨면 기능 추가 를 통해 설치가 가능하다.
(실행 > ServerManagerLauncher 로도 실행가능함)
제거되지 않는 공백
SELECT 문으로 봤을때 462 라고만 나오고
REPLACE(컬럼,' ', '') 또는 LTRIM,RTRIM을 사용해도
제대로 제거되지 않는 공백이 포함되어 있는 데이터의
ASCII 코드를 살펴보니 아래와 같은 데이터들이 포함.
DECLARE @position int, @string char(15)
SET @position = 1
SET @string = (select TESTCOL from TESTTBL where ~~~ )
WHILE @position <= DATALENGTH(@string)
BEGIN
SELECT ASCII(SUBSTRING(@string, @position, 1)),
CHAR(ASCII(SUBSTRING(@string, @position, 1)))
SET @position = @position + 1
END
-- 결과 --------
----------- ----
52 4
----------- ----
54 6
----------- ----
50 2
----------- ----
9
----------- ----
32
----------- ----
32
----------- ----
32
----------- ----
32
오라클에서 SQL Server로 이관한 데이터에는 겉으로 보기엔 같은 공백,
ASCII 다양한 공백이 포함되어 있었고
REPLACE(컬럼, CHAR(9), '') 와 같은 방법으로 처리
CHAR(32)는 일반적인 공백이므로 REPLACE나 TRIM으로 처리가 가능.
SQL SERVER 에서는 CHAR(9)가 포함된 두 개의 데이터를 구분하지만
SSAS에서 차원처리를 하거나 할때는 같은 데이터로 보고 에러를 낸다.
(키중복 등)
특정 차원 멤버로 필터링된 측정값 생성
CREATE MEMBER CURRENTCUBE.[Measures].[남성고객수]
AS SUM({ [성별].[성별].&[M]}, [Measures].[고객고유카운트]);
CREATE MEMBER CURRENTCUBE.[Measures].[여성고객수]
AS SUM({ [성별].[성별].&[F]}, [Measures].[고객고유카운트]);
AS SUM({ [성별].[성별].&[M]}, [Measures].[고객고유카운트]);
CREATE MEMBER CURRENTCUBE.[Measures].[여성고객수]
AS SUM({ [성별].[성별].&[F]}, [Measures].[고객고유카운트]);
엑셀 새창 띄우기
엑셀파일 더블클릭시 새창으로 띄우기
1. 실행 → regedit
2. HKEY_CLASSES_ROOT\Excel.sheet.12\shell\open\ddeexec → 폴더 삭제
3. HKEY_CLASSES_ROOT\Excel.sheet.12\shell\open\command\command → 삭제
4. HKEY_CLASSES_ROOT\Excel.sheet.12\shell\open\command\(기본값) 수정
→ C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" /en "%1
1. 실행 → regedit
2. HKEY_CLASSES_ROOT\Excel.sheet.12\shell\open\ddeexec → 폴더 삭제
3. HKEY_CLASSES_ROOT\Excel.sheet.12\shell\open\command\command → 삭제
4. HKEY_CLASSES_ROOT\Excel.sheet.12\shell\open\command\(기본값) 수정
→ C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" /en "%1
Oracle Calendar table
오라클 일자테이블 생성
SELECT TO_CHAR (MYDATE, 'yyyymmdd') AS DATE_CD,
TO_CHAR (MYDATE, 'yyyy') AS YEAR_CD,
TO_CHAR (MYDATE, 'yyyy')||'년' AS YEAR_NM,
TO_CHAR (MYDATE, 'MM') AS MONTH_CD,
TO_CHAR (MYDATE, 'MM')||'월' AS MONTH_NM,
TO_CHAR (MYDATE, 'DD') AS DAY_CD,
TO_CHAR (MYDATE, 'DD')||'일' AS DAY_NM,
TO_CHAR (MYDATE, 'D') AS WEEK_CD,
TO_CHAR (MYDATE, 'Day') AS WEEK_NM,
TO_CHAR (MYDATE, 'WW') AS YEAR_WEEK_CD,
TO_CHAR (MYDATE, 'WW')||'주차' AS YEAR_WEEK_NM,
TO_CHAR (MYDATE, 'Q') AS QRTR_CD,
TO_CHAR (MYDATE, 'Q')||'/4분기' AS QRTR_NM,
DECODE( TO_CHAR (MYDATE, 'Q'), '1','1','2','1','3','2','4','2') AS HALF_CD,
DECODE( TO_CHAR (MYDATE, 'Q'), '1','상반기','2','상반기','3','하반기','4','하반기') AS HALF_NM
FROM (
SELECT TRUNC (ADD_MONTHS (SYSDATE, -60), 'yy') - 1 + LEVEL AS MYDATE
FROM DUAL
CONNECT BY LEVEL <= (SELECT TRUNC (ADD_MONTHS (SYSDATE, 60), 'yy')
- TRUNC (ADD_MONTHS (SYSDATE, -12), 'yy')
FROM DUAL
)
);
SELECT TO_CHAR (MYDATE, 'yyyymmdd') AS DATE_CD,
TO_CHAR (MYDATE, 'yyyy') AS YEAR_CD,
TO_CHAR (MYDATE, 'yyyy')||'년' AS YEAR_NM,
TO_CHAR (MYDATE, 'MM') AS MONTH_CD,
TO_CHAR (MYDATE, 'MM')||'월' AS MONTH_NM,
TO_CHAR (MYDATE, 'DD') AS DAY_CD,
TO_CHAR (MYDATE, 'DD')||'일' AS DAY_NM,
TO_CHAR (MYDATE, 'D') AS WEEK_CD,
TO_CHAR (MYDATE, 'Day') AS WEEK_NM,
TO_CHAR (MYDATE, 'WW') AS YEAR_WEEK_CD,
TO_CHAR (MYDATE, 'WW')||'주차' AS YEAR_WEEK_NM,
TO_CHAR (MYDATE, 'Q') AS QRTR_CD,
TO_CHAR (MYDATE, 'Q')||'/4분기' AS QRTR_NM,
DECODE( TO_CHAR (MYDATE, 'Q'), '1','1','2','1','3','2','4','2') AS HALF_CD,
DECODE( TO_CHAR (MYDATE, 'Q'), '1','상반기','2','상반기','3','하반기','4','하반기') AS HALF_NM
FROM (
SELECT TRUNC (ADD_MONTHS (SYSDATE, -60), 'yy') - 1 + LEVEL AS MYDATE
FROM DUAL
CONNECT BY LEVEL <= (SELECT TRUNC (ADD_MONTHS (SYSDATE, 60), 'yy')
- TRUNC (ADD_MONTHS (SYSDATE, -12), 'yy')
FROM DUAL
)
);