2014년 7월 14일 월요일

세션의 SET 옵션 확인하기

세션의 현재 SET 옵션에 대한 정보를 확인하려면 @@OPTIONS함수를 사용합니다.

제 PC에서 확인해보니 5496이라는 값이 나오는군요.
근데 5496이면 어떤 옵션이 설정되어 있을까요?
MSDN에서는 NOCOUNT 옵션이 설정되어 있는지 확인하기 위해 다음과 같은 방법을 사용합니다.
SET NOCOUNT ON
IF @@OPTIONS & 512 > 0 
RAISERROR ('Current user has SET NOCOUNT turned on.', 1, 1)
NOCOUNT에 해당하는 구성 값이 512이므로 512로 비트 AND 연산을 합니다. 각 구성옵션에 해당 하는 값은 MSDN user options 서버 구성 옵션 구성 항목에서 확인할 수 있습니다. 보다 쉽게 옵션을 확인하는 방법은 @@OPTIONS 리턴값을 이진수로 바꾼다음 각 비트가 1인지 확인하는 것입니다. 다음은 한번에 SET 옵션을 확인하는 방법입니다. 이진수로 바꾸는 방법은 여기를 참조하세요.
DECLARE @OPTION VARCHAR(32)
SET @OPTION = RIGHT(master.DBO.FUNC_DEC2BIN(@@OPTIONS), 15)

PRINT 'SET DISABLE_DEF_CNST_CHK ' + CASE WHEN SUBSTRING(@OPTION, 15, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET IMPLICIT_TRANSACTIONS ' + CASE WHEN SUBSTRING(@OPTION, 14, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET CURSOR_CLOSE_ON_COMMIT ' + CASE WHEN SUBSTRING(@OPTION, 13, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET ANSI_WARNINGS ' + CASE WHEN SUBSTRING(@OPTION, 12, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET ANSI_PADDING ' + CASE WHEN SUBSTRING(@OPTION, 11, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET ANSI_NULLS ' + CASE WHEN SUBSTRING(@OPTION, 10, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET ARITHABORT ' + CASE WHEN SUBSTRING(@OPTION, 9, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET ARITHIGNORE ' + CASE WHEN SUBSTRING(@OPTION, 8, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET QUOTED_IDENTIFIER ' + CASE WHEN SUBSTRING(@OPTION, 7, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET NOCOUNT ' + CASE WHEN SUBSTRING(@OPTION, 6, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET ANSI_NULL_DFLT_ON ' + CASE WHEN SUBSTRING(@OPTION, 5, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET ANSI_NULL_DFLT_OFF ' + CASE WHEN SUBSTRING(@OPTION, 4, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET CONCAT_NULL_YIELDS_NULL ' + CASE WHEN SUBSTRING(@OPTION, 3, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET NUMERIC_ROUNDABORT ' + CASE WHEN SUBSTRING(@OPTION, 2, 1) = '1' THEN 'ON' ELSE 'OFF' END
PRINT 'SET XACT_ABORT ' + CASE WHEN SUBSTRING(@OPTION, 1, 1) = '1' THEN 'ON' ELSE 'OFF' END
제 컴퓨터에서 실행했을때 결과입니다.
SET DISABLE_DEF_CNST_CHK OFF
SET IMPLICIT_TRANSACTIONS OFF
SET CURSOR_CLOSE_ON_COMMIT OFF
SET ANSI_WARNINGS ON
SET ANSI_PADDING ON
SET ANSI_NULLS ON
SET ARITHABORT ON
SET ARITHIGNORE OFF
SET QUOTED_IDENTIFIER ON
SET NOCOUNT OFF
SET ANSI_NULL_DFLT_ON ON
SET ANSI_NULL_DFLT_OFF OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET NUMERIC_ROUNDABORT OFF
SET XACT_ABORT OFF

댓글 없음:

댓글 쓰기