[MSSQL]StoredProcedure SET Statements

Database/MSSQL

- SET NOCOUNT ON/OFF

Stops the message that shows the count of the number of rows affected by a Transact-SQL statement or stored procedure from being returned as part of the result set.


예시1)

CREATE PROCEDURE dbo.getRecordSet

BEGIN

    SELECT *

      FROM #LIST

END


예시2)

CREATE PROCEDURE dbo.getRecordSet

BEGIN

SET NOCOUNT ON

     SELECT *

 FROM #LIST

END


EXEC dbo.getRecordSet 호출 시 예시1은 RecordSet을 넘겨 받지 못하며, 예시2RecordSet 넘겨 받는다.


프로시저는 항상 자신의 마지막 로직(SELECT, UPDATE, INSERT, DELETE)에서 영향받은 record 수를 반환한다. 

이를 통해서, 'N개의 행이 적용되었습니다.' 메세지를 뿌려주게 된다. SET NOCOUNT ON 할 경우, record 수를 반환하지 않는다.



- SET ANSI_NULLS ON/OFF

Specifies ISO compliant behavior of the Equals (=) and Not Equal To (<>) comparison operators when they are used with null values in SQL Server 2016.


예시전 기초 Table 생성)

SELECT '1' AS SEQ, NULL AS VALUE

INTO #LIST

UNION ALL

SELECT '2' AS SEQ, 'A' AS VALUE

UNION ALL

SELECT '3' AS SEQ, 'B' AS VALUE


예시1)

SET ANSI_NULLS ON

GO


SELECT SEQ, VALUE

  FROM #LIST

 WHERE VALUE = NULL


예시2)

SET ANSI_NULLS OFF

GO


SELECT SEQ, VALUE

  FROM #LIST

 WHERE VALUE = NULL


예시1은 조회된 record 수가 없으며, 예시2은 seq=1의 record 조회 된다.


SELECT *

  FROM #LIST

 WHERE VALUE IS NULL


SET ANSI_NULLS 과 무관하게 VALUE=NULL인 record를 조회하고 싶다면, 다음과 같이 Sql 문을 작성하자.



- SET QUOTED_IDENTIFIER ON/OFF

Causes SQL Server to follow the ISO rules regarding quotation mark delimiting identifiers and literal strings. Identifiers delimited by double quotation marks can be either Transact-SQL reserved keywords or can contain characters not generally allowed by the Transact-SQL syntax rules for identifiers.


예시1-1)

SET QUOTED_IDENTIFIER ON

GO

select "실행" as seq


예시1-2)

SET QUOTED_IDENTIFIER OFF

GO

select "실행" as seq


예시2-1)

SET QUOTED_IDENTIFIER ON

GO

select CHAR(39)+'실행'+CHAR(39) as seq


예시2-1)

SET QUOTED_IDENTIFIER OFF

GO

select "'실행'" as seq


예시3-1) 위에서 생성한 #LIST 이용

SET QUOTED_IDENTIFIER ON

GO

SELECT *
  FROM #LIST
 WHERE "VALUE" IS NULL

예시3-2) 위에서 생성한 #LIST 이용

SET QUOTED_IDENTIFIER OFF

GO

SELECT *
  FROM #LIST
 WHERE "VALUE" IS NULL


예시1-1은 Error가 발생하며, 예시1-2은 Error가 발생되지 않는다.

예시2-1, 예시2-2은 같은 결과를 return 한다.

예시3-1은 seq=1의 record 조회되며, 예시3-2은 조회된 record 수가 없다. 


옵션이 ON으로 설정되면 식별자를 큰따옴표(")로 구분할 수 있고, 리터럴을 작은따옴표(')로 구분해야 합니다.

OFF(기본값)로 설정되면 식별자가 따옴표 안에 있을 수 없고 모든 Transact-SQL 식별자 규칙을 따라야 합니다. ex) [VALUE] (O), "VALUE" (X)

리터럴은 작은따옴표(') 또는 큰따옴표(")으로 구분할 수 있습니다.



* 참조

https://msdn.microsoft.com/en-us/library/ms190356.aspx