문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자. 문서의 원본을 보거나 복사할 수 있습니다. ==참조== === CLR 정보 조회=== <syntaxhighlight lang="sql"> SELECT * FROM SYS.ASSEMBLIES SELECT * FROM SYS.ASSEMBLY_FILES </syntaxhighlight> <br /> <span style="color:red; font-weight:bold;">.NET Framework에서 사용자 코드를 실행할 수 없습니다. "clr enabled" 구성 옵션을 설정하십시오.</span> 라는 오류를 만나면 CLR 사용을 가능하게 설정해야 합니다. <br /> [http://technet.microsoft.com/en-us/library/ms131048.aspx Enabling CLR Integration] <br /> <syntaxhighlight lang="sql">EXEC sp_configure 'clr enabled', 1 RECONFIGURE</syntaxhighlight> ===쿼리 결과를 파일로 저장=== BCP 유틸리티를 사용 <syntaxhighlight lang="bash">사용법: bcp {dbtable | query} {in | out | queryout | format} 데이터 파일 [-m 최대 오류 수] [-f 서식 파일] [-e 오류 파일] [-F 첫 행] [-L 마지막 행] [-b 일괄 처리 크기] [-n 네이티브 유형] [-c 문자 유형] [-w 와이드 문자 유형] [-N 비텍스트 네이티브 유지] [-V 파일 형식 버전] [-q 따옴표 붙은 식별자] [-C 코드 페이지 지정자] [-t 필드 종결자] [-r 행 종결자] [-i 입력 파일] [-o 출력 파일] [-a 패킷 크기] [-S 서버 이름] [-U 사용자 이름] [-P 암호] [-T 트러스트된 연결] [-v 버전] [-R 국가별 설정 사용] [-k Null 값 유지] [-E ID 값 유지] [-h "힌트 로드"] [-x xml 서식 파일 생성] [-d 데이터베이스 이름] [-K 응용 프로그램 의도] </syntaxhighlight> <br /> 다음과 같이 사용한다. <div class="console">C:\>bcp "select * from <데이터베이스>.<스키마>.<테이블>" queryout "c:\result.txt" -k -c -S <서버> -U "<사용자>" -P "<비밀번호>" -c</div> === OFFSET === MS SQL Server 2012 에 추가된 OFFSET 사용 예제 <syntaxhighlight lang="sql">-- exec sp_board_select 1, 11 alter procedure sp_board_select @page int, -- current page @count int -- record per page as begin set nocount on SELECT id, title FROM dbo.board ORDER BY id DESC OFFSET (@page - 1) * @count ROWS FETCH NEXT @count ROWS ONLY; end go</syntaxhighlight> === 테이블 물리적 크기 조회 === <syntaxhighlight lang="sql">SELECT t.NAME AS TableName, s.Name AS SchemaName, p.rows AS RowCounts, SUM(a.total_pages) * 8 AS TotalSpaceKB, SUM(a.used_pages) * 8 AS UsedSpaceKB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB FROM sys.tables t INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.NAME NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255 GROUP BY t.Name, s.Name, p.Rows ORDER BY t.Name</syntaxhighlight> === 현재 세션 확인 === <syntaxhighlight lang="sql">select * from sys.dm_exec_sessions</syntaxhighlight> === 최근 실행된 쿼리 확인 === <syntaxhighlight lang="sql">select * from sys.dm_exec_query_stats cross apply sys.dm_exec_sql_text(sql_handle) where last_execution_time >= '2014-11-10' order by last_execution_time desc</syntaxhighlight> === base64 Encoding / Decoding === ==== Encode ==== <source lang="sql">CREATE FUNCTION dbo.FN_ENCODE_BASE64 ( @SOURCE NVARCHAR(1000) ) RETURNS VARCHAR(1000) AS BEGIN DECLARE @RESULT NVARCHAR(4000), @vSOURCE NVARCHAR(1000) SET @vSOURCE = @SOURCE; IF @vSOURCE IS NULL SET @vSOURCE = N'' -- OR RETURN NULL SELECT @RESULT = CAST(N'' AS XML).value( 'xs:base64Binary(xs:hexBinary(sql:column("BIN")))', 'VARCHAR(MAX)') FROM ( SELECT CAST(@vSOURCE AS VARBINARY(1000)) AS BIN ) BIN_DATA RETURN @RESULT END GO </source> ==== Decode ==== <source lang="sql">CREATE FUNCTION dbo.FN_DECODE_BASE64 ( @SOURCE NVARCHAR(4000) ) RETURNS NVARCHAR(1000) AS BEGIN DECLARE @RESULT NVARCHAR(1000), @vSOURCE NVARCHAR(4000) SET @vSOURCE = @SOURCE IF @vSOURCE IS NULL RETURN NULL SELECT @RESULT = CAST( CAST(N'' AS XML).value('xs:base64Binary(sql:column("DATA"))', 'VARBINARY(MAX)') AS NVARCHAR(4000)) FROM ( SELECT @vSOURCE AS DATA ) BIN_DATA RETURN @RESULT END GO</source> === Generate Random String === 함수 내에서 RAND() 를 실행할 수 없으므로 뷰를 만들어 사용한다. <source lang="sql">CREATE VIEW dbo.VrndView AS SELECT RAND() RNDRESULT</source> 문자열 생성 <source lang="sql">CREATE FUNCTION dbo.FN_RANDOM_STRING ( @STRING_LENGTH INT ) RETURNS NVARCHAR(4000) AS BEGIN DECLARE @RND INT, @STRING NVARCHAR(4000) SET @STRING = N''; IF @STRING_LENGTH IS NULL SET @STRING_LENGTH = 16; WHILE(1 = 1) BEGIN SELECT @RND = CEILING(RNDRESULT * 1000) --CEILING(RAND() * 1000) FROM dbo.VrndView /* 33 ! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47 / 0(48) ~ 9(57) A(65) ~ Z(90) A(97) ~ (Z)122 */ --IF -- @RND NOT BETWEEN 48 AND 57 AND -- @RND NOT BETWEEN 65 AND 90 AND -- @RND NOT BETWEEN 97 AND 122 --CONTINUE; IF @RND NOT BETWEEN 33 AND 122 CONTINUE; --IF @RND = 0 CONTINUE; SET @STRING += NCHAR(@RND); IF (LEN(@STRING) = @STRING_LENGTH) BREAK; END RETURN @STRING END</source> 테스트 <source lang="sql">select tmp.String, len(tmp.String) as StringLength, dbo.FN_ENCODE_BASE64(tmp.String) as EncodedString, len(dbo.FN_ENCODE_BASE64(tmp.String)) as EncodedLength, dbo.FN_DECODE_BASE64(dbo.FN_ENCODE_BASE64(tmp.String)) as DecodedString, case when dbo.FN_DECODE_BASE64(dbo.FN_ENCODE_BASE64(tmp.String)) = tmp.String then 'Valid' else 'Invalid' end as Valid from ( select dbo.FN_RANDOM_STRING(12) as String ) tmp</source> MS SQL Server 문서로 돌아갑니다.