결과에 영향을 주는 SET 옵션
계산 열의 인덱싱된 뷰와 인덱스는 나중에 참조하기 위해 데이터베이스에 결과를 저장합니다. 저장된 결과는 인덱싱된 뷰 또는 인덱싱된 계산 열을 참조하는 모든 연결이 해당 인덱스를 만든 연결과 동일한 결과 집합을 생성할 수 있는 경우에만 유효합니다. 저장된 결과가 올바르게 유지 관리되도록 하고 일관된 결과를 반환하도록 하려면 다음 조건이 발생할 때마다 다음 표의 SET 옵션을 필요한 값 열에 표시된 값으로 설정해야 합니다.
뷰 또는 계산 열에 대해 인덱스가 생성됩니다.
계산 열이 정의되었고 PERSISTED가 지정되었습니다.
INSERT, UPDATE 또는 DELETE 연산에 따라 인덱싱된 뷰 또는 인덱싱된 계산 열에 저장된 데이터 값이 수정됩니다. 여기에는 BCP, DTS, 복제 및 분산 쿼리와 같은 연산이 포함됩니다.
쿼리 최적화 프로그램에서 쿼리 실행 계획의 인덱스를 사용합니다.
인덱싱된 뷰의 경우 ANSI_NULLS 및 QUOTED_IDENTIFIER 옵션은 뷰 메타데이터와 함께 저장되기 때문에 뷰를 만들 때 ON으로 설정되어야 합니다.
SET 옵션
필요한 값
기본 서버 값
기본
OLE DB 및 ODBC 값
기본
DB-Library 값
ANSI_NULLS
ON
OFF
ON
OFF
ANSI_PADDING
ON
ON
ON
OFF
ANSI_WARNINGS*
ON
OFF
ON
OFF
ARITHABORT
ON
ON
OFF
OFF
CONCAT_NULL_YIELDS_NULL
ON
OFF
ON
OFF
NUMERIC_ROUNDABORT
OFF
OFF
OFF
OFF
QUOTED_IDENTIFIER
ON
OFF
ON
OFF
*데이터베이스 호환성 수준이 90 이상으로 설정된 경우 ANSI_WARNINGS를 ON으로 설정하면 암시적으로 ARITHABORT가 ON으로 설정됩니다. 데이터베이스 호환성 수준이 80 이하로 설정된 경우에는 명시적으로 ARITHABORT 옵션을 ON으로 설정해야 합니다.
SET 옵션을 잘못 설정하면 다음 상황이 발생할 수 있습니다.
데이터베이스 엔진에서 오류를 생성하고 인덱스에 저장된 데이터 값을 변경하는 INSERT, UPDATE 또는 DELETE 문을 롤백합니다.
쿼리 최적화 프로그램에서 Transact-SQL 문의 실행 계획에 있는 인덱스를 고려하지 않습니다.
인덱싱된 뷰 또는 계산 열을 만들 수 없습니다.
OLE DB 및 ODBC 연결의 SET 옵션 설정
SQL Server Management Studio, Integration Services, 복제 및 대량 복사 작업을 비롯한 대부분의 응용 프로그램에서는 SQL Server용 OLE DB 공급자나 SQL Server ODBC 드라이버를 사용하여 SQL Server 인스턴스에 연결합니다. OLE DB 및 ODBC 기본 설정은 뷰 또는 계산 열의 인덱스에 필요한 6개의 SET 옵션에 대해 올바릅니다. OLE DB 및 ODBC의 기본값은 위의 표를 참조하십시오. 또한 이러한 설정은 ISO 표준 규칙에 따르므로 SQL Server에 권장되는 설정입니다. 자세한 내용은 클라이언트 네트워크 구성을 참조하십시오.
[!참고]
SQL Server의 일부 유틸리티는 하나 이상의 ANSI 설정을 OFF로 지정하여 이전 버전의 유틸리티와 호환되도록 합니다.
DB-Library 및 C 언어용 Embedded SQL 연결을 위한 SET 옵션 설정
DB-Library 및 C 언어용 Embedded SQL 응용 프로그램에서는 기본적으로 세션 옵션을 설정하지 않습니다. 이러한 API를 사용하는 시스템에서는 적절한 SET 문을 실행하도록 응용 프로그램을 코딩하거나 데이터베이스 또는 서버의 기본값을 올바른 설정으로 변경해야 합니다.
옵션 설정의 우선 순위
SET 옵션의 ON 또는 OFF 설정은 여러 수준으로 지정할 수 있습니다. 각 세션 옵션의 마지막 설정은 옵션을 설정하는 우선 순위가 가장 높은 작업에 의해 결정됩니다. 세션 설정 작업의 우선 순위는 다음과 같습니다. 우선 순위가 가장 높은 작업이 목록의 맨 위에 있습니다.
응용 프로그램이 서버에 연결한 다음 SET 문을 실행하여 기본 설정을 명시적으로 덮어쓸 수 있습니다. SET 문은 이전의 모든 설정을 덮어쓰므로 응용 프로그램이 실행될 때 옵션을 동적으로 설정하고 해제하는 데 사용할 수 있습니다. 이러한 옵션 설정은 현재 연결 세션에만 적용할 수 있습니다.
OLE DB 및 ODBC 응용 프로그램은 연결 문자열에서 옵션 설정을 지정하여 연결 시 적용되는 옵션 설정을 지정할 수 있습니다. 이러한 옵션 설정은 현재 연결 세션에만 적용할 수 있습니다.
제어판의 ODBC 응용 프로그램 또는 ODBC SQLConfigDataSource 함수를 사용하여 SQL Server ODBC 데이터 원본에 대해 지정한 SET 옵션
데이터베이스의 기본 설정. ALTER DATABASE 또는 SQL Server Management Studio의 개체 탐색기를 사용하여 이 값을 지정할 수 있습니다.
서버의 기본 설정. sp_configure 또는 SQL Server Management Studio의 개체 탐색기를 통해 user options라는 서버 구성 옵션을 설정하여 이 값을 지정할 수 있습니다.
예를 들어 ANSI_NULLS에 대한 ODBC 기본값은 ON이지만 ODBC 연결 문자열에서 이 옵션을 OFF로 설정하거나 데이터베이스에 연결한 후 SET 문을 사용하여 이 값을 무시할 수 있습니다.
저장 프로시저 및 트리거
저장 프로시저와 트리거는 뷰 및 계산 열의 인덱스를 지원하는 데 필요한 6개의 SET 옵션과 작동하도록 작성해야 합니다. SET 옵션이 잘못 설정된 경우에는 쿼리 최적화 프로그램에서 저장 프로시저 또는 트리거에 의해 실행된 SELECT 문의 뷰 또는 계산 열의 인덱스를 사용하지 않습니다. 인덱싱된 뷰 또는 계산 열에 저장된 데이터 값을 수정하는 저장 프로시저 또는 트리거의 INSERT, UPDATE 또는 DELETE 문은 오류를 생성합니다.
고려 사항
SET 문은 세션 옵션을 동적으로 변경하므로 뷰 및 인덱싱된 계산 열에 인덱스가 있는 데이터베이스에서 SET 문을 실행할 경우에는 주의해야 합니다. 예를 들어 응용 프로그램은 인덱싱된 뷰 또는 인덱싱된 계산 열이 참조되도록 허용하는 기본 설정으로 연결을 수립할 수 있습니다. 그러나 이 연결에서 첫 번째 문이 SET ANSI_WARNINGS OFF인 저장 프로시저나 트리거를 호출하면 SET 문은 ANSI_WARNINGS에 대한 이전의 기본값 또는 설정을 덮어쓰게 됩니다. 이 경우 최적화 프로그램에서는 저장 프로시저 또는 트리거의 문을 처리할 때 인덱싱된 뷰나 인덱싱된 계산 열을 모두 무시합니다.
결과 집합에 영향을 줄 수 있는 세 가지 세션 옵션으로는 DATEFIRST, DATEFORMAT 및 LANGUAGE가 있습니다. 이들 옵션의 변경에 영향을 받는 결과를 갖는 함수는 확정적이지 않은 함수로 분류되므로 인덱싱된 뷰 또는 인덱싱된 계산 열에서 사용할 수 없습니다.