SQL Server 2014 데이터베이스 엔진 기능의 동작 변경 내용

이 항목에서는 데이터베이스 엔진의 동작 변경에 대해 설명합니다. 동작 변경은 이전 버전의 SQL Server 비해 2014년 SQL Server 기능이 작동하거나 상호 작용하는 방식에 영향을 미칩니다.

SQL Server 2014의 동작 변경 내용

이전 버전의 SQL Server 특정 길이(4020자 이상)를 초과하는 문자열이 포함된 XML 문서에 대한 쿼리는 잘못된 결과를 반환할 수 있습니다. 2014년 SQL Server 이러한 쿼리는 올바른 결과를 반환합니다.

SQL Server 2012의 동작 변경 내용

메타데이터 검색

SQL Server 2012부터 데이터베이스 엔진이 개선되어 SQLDescribeCol이 이전 버전의 SQL Server SQLDescribeCol에서 반환한 결과보다 예상 결과에 대한 보다 정확한 설명을 얻을 수 있습니다. 자세한 내용은 메타데이터 검색을 참조하세요.

쿼리를 실제로 실행하지 않고 응답 형식을 결정하는 SET FMTONLY 옵션은 sp_describe_first_result_set(Transact-SQL), sp_describe_undeclared_parameters(Transact-SQL), sys.dm_exec_describe_first_result_set(Transact-SQL) 및 sys.dm_exec_describe_first_result_set_for_object(Transact-SQL)로 바뀝니다.

SQL Server 에이전트 태스크의 스크립팅 동작 변경 내용

SQL Server 2012부터 기존 작업에서 스크립트를 복사하여 새 작업을 만드는 경우 새 작업이 실수로 기존 작업에 영향을 줄 수 있습니다. 기존 작업 스크립트를 사용하여 새 작업을 만들려면 주로 기존 작업에서 작업 스케줄을 만드는 섹션의 마지막 매개 변수인 @schedule_uid 를 수동으로 삭제하십시오. 이렇게 하면 기존 작업에 영향을 주지 않고 새 작업의 독립적인 새 스케줄을 만들 수 있습니다.

CLR 사용자 정의 함수 및 메서드를 위한 상수 폴딩

SQL Server 2012부터 다음과 같은 사용자 정의 CLR 개체를 접을 수 있습니다.

  • 결정적 스칼라 반환 CLR 사용자 정의 함수
  • CLR 사용자 정의 형식의 결정적 메서드

이러한 개선 사항은 동일한 인수를 사용하여 이러한 함수 또는 메서드를 두 번 이상 호출할 때 성능을 향상시키기 위한 것입니다. 그러나 오류에서 비결정적 함수 또는 메서드가 결정적으로 표시된 경우에는 이러한 변경으로 인해 예기치 않은 결과가 발생할 수 있습니다. CLR 함수 또는 메서드의 결정성은 IsDeterministic 또는 SqlFunctionAttributeSqlMethodAttribute 속성 값으로 표시됩니다.

빈 공간 형식을 사용하는 STEnvelope() 메서드의 동작이 변경됨

이제 빈 개체가 있는 STEnvelope 메서드의 동작은 다른 SQL Server 공간 메서드의 동작과 일치합니다.

SQL Server 2008에서 메서드는 STEnvelope 빈 개체를 사용하여 호출할 때 다음 결과를 반환했습니다.

SELECT geometry::Parse('POINT EMPTY').STEnvelope().ToString()  
-- returns POINT EMPTY  
SELECT geometry::Parse('LINESTRING EMPTY').STEnvelope().ToString()  
-- returns LINESTRING EMPTY  
SELECT geometry::Parse('POLYGON EMPTY').STEnvelope().ToString()  
-- returns POLYGON EMPTY  

SQL Server 2012에서 메서드는 STEnvelope 이제 빈 개체를 사용하여 호출할 때 다음 결과를 반환합니다.

SELECT geometry::Parse('POINT EMPTY').STEnvelope().ToString()  
-- returns GEOMETRYCOLLECTION EMPTY  
SELECT geometry::Parse('LINESTRING EMPTY').STEnvelope().ToString()  
-- returns GEOMETRYCOLLECTION EMPTY  
SELECT geometry::Parse('POLYGON EMPTY').STEnvelope().ToString()  
-- returns GEOMETRYCOLLECTION EMPTY  

공간 개체가 비어 있는지 여부를 확인하려면 STIsEmpty(geometry 데이터 형식) 메서드를 호출합니다 .

로그 함수에 새로운 선택적 매개 변수 포함

LOG 이제 함수에 선택적 기본 매개 변수가 있습니다. 자세한 내용은 LOG(Transact-SQL)를 참조하세요.

분할된 인덱스 작업 중의 통계 계산이 변경됨

2014년 SQL Server 분할된 인덱스를 만들거나 다시 작성할 때 테이블의 모든 행을 검사하여 통계를 만들지 않습니다. 대신, 쿼리 최적화 프로그램에서 기본 샘플링 알고리즘을 사용하여 통계를 생성합니다. 분할된 인덱스로 데이터베이스를 업그레이드한 후 인덱스에 대한 히스토그램 데이터가 달라집니다. 이 동작 변경이 쿼리 성능에는 영향을 주지 않을 수 있습니다. 테이블의 모든 행을 검사하여 분할된 인덱스에 대한 통계를 얻으려면 FULLSCAN 절에서 CREATE STATISTICS 또는 UPDATE STATISTICS를 사용합니다.

XML 값 메서드에 의한 데이터 형식 변환이 변경됨

value 데이터 형식의 xml 메서드에 대한 내부 동작이 변경되었습니다. 이 메서드는 XML에 대해 XQuery를 수행하고 지정된 SQL Server 데이터 형식의 스칼라 값을 반환합니다. xs 형식을 SQL Server 데이터 형식으로 변환해야 합니다. 이전에는 메서드가 value 소스 값을 xs:string으로 내부적으로 변환한 다음 xs:string을 SQL Server 데이터 형식으로 변환했습니다. 2014년 SQL Server xs:string으로의 변환은 다음과 같은 경우에 건너뜁니다.

원본 XS 데이터 형식 대상 SQL Server 데이터 형식
byte

short

int

정수

long

unsignedByte

unsignedShort

unsignedInt

unsignedLong

positiveInteger

nonPositiveInteger

negativeInteger

nonNegativeInteger
tinyint

smallint

int

bigint

decimal

numeric
decimal decimal

numeric
float real
double float

중간 변환을 건너뛸 수 있는 경우 새로운 동작으로 인해 성능이 향상됩니다. 그러나 데이터 형식 변환에 실패하는 경우 중간 xs:string 값에서 변환할 때 발생했던 오류 메시지와 다른 메시지가 표시됩니다. 예를 들어 value 메서드에서 int 값 100000을 smallint로 변환하는 데 실패한 경우 이전에 표시된 오류 메시지는 다음과 같습니다.

The conversion of the nvarchar value '100000' overflowed an INT2 column. Use a larger integer column.

2014년 SQL Server xs:string으로의 중간 변환 없이 오류 메시지는 다음과 같습니다.

Arithmetic overflow error converting expression to data type smallint.

XML 모드에서의 sqlcmd.exe 동작 변경 내용

T FOR XML에서 SELECT *를 실행할 때 XML 모드(:XML ON 명령)에서 sqlcmd.exe 사용하는 경우 동작이 변경됩니다.

DBCC CHECKIDENT 수정 메시지

2012년 SQL Server DBCC CHECKIDENT 명령에서 반환된 메시지는 RESEED new_reseed_value 사용하여 현재 ID 값을 변경하는 경우에만 변경되었습니다. 새 메시지는 "ID 정보 확인: 현재 ID 값 '<현재 ID 값>'"입니다. DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 출력하면 시스템 관리자에게 문의하세요."

이전 버전에서 메시지는 "ID 정보 확인: 현재 ID 값 '<현재 ID 값>', 현재 열 값 '현재 열 값>'<입니다. DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 인쇄한 경우 시스템 관리자에게 문의하세요." 을 두 번째 매개 변수 없이 또는 다시 시드 값 NORESEED없이 로 지정하면 메시지가 변경되지 DBCC CHECKIDENT 않습니다. 자세한 내용은 DBCC CHECKIDENT(Transact-SQL)를 참조하세요.

XML 데이터 형식에서의 exist() 함수 동작이 변경됨

XML 데이터 형식을 exist() null 값과 0으로 비교할 때 함수의 동작이 변경되었습니다. 다음 예제를 살펴보겠습니다.

DECLARE @test XML;  
SET @test = null;  
SELECT COUNT(1) WHERE @test.exist('/dogs') = 0;  

이전 버전에서는 이러한 비교 시 1(true)이 반환되었는데 이제는 0(false)이 반환됩니다.

다음 비교는 변경되지 않았습니다.

DECLARE @test XML;  
SET @test = null;  
SELECT COUNT(1) WHERE @test.exist('/dogs') = 1; -- 0 expected, 0 returned  
SELECT COUNT(1) WHERE @test.exist('/dogs') IS NULL; -- 1 expected, 1 returned  

참고 항목

SQL Server 2014 데이터베이스 엔진 기능의 주요 변경
SQL Server 2014 이후에는 지원되지 않는 데이터베이스 엔진 기능
SQL Server 2014에서 지원되지 않는 데이터베이스 엔진 기능
ALTER DATABASE 호환성 수준(Transact-SQL)