이 항목에서는 데이터베이스 엔진의 동작 변경에 대해 설명합니다. 동작 변경은 이전 버전의 SQL Server와 비교하여 SQL Server 2014에서 기능이 작동하거나 상호 작용하는 방식에 영향을 미칩니다.
SQL Server 2014의 동작 변경 내용
이전 버전의 SQL Server에서는 특정 길이(4020자 이상)에 대한 문자열이 포함된 XML 문서에 대한 쿼리가 잘못된 결과를 반환할 수 있습니다. SQL Server 2014에서 이러한 쿼리는 올바른 결과를 반환합니다.
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 User-Defined 함수 및 메서드에 대한 상수 폴딩
SQL Server 2012부터 다음과 같은 사용자 정의 CLR 개체를 접을 수 있습니다.
- 스칼라 값을 반환하는 결정적 CLR 사용자 정의 함수입니다.
- CLR 사용자 정의 형식의 결정적 메서드입니다.
이러한 개선은 이러한 함수 또는 메서드가 동일한 인수를 사용하여 두 번 이상 호출될 때 성능을 향상시키려 합니다. 그러나 이 변경으로 인해 비결정적 함수 또는 메서드가 오류에서 결정적으로 표시된 경우 예기치 않은 결과가 발생할 수 있습니다. CLR 함수 또는 메서드의 결정성은 SqlFunctionAttribute
또는 SqlMethodAttribute
의 IsDeterministic
속성 값으로 표시됩니다.
빈 공간 형식으로 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 Data Type) 메서드를 호출합니다.
LOG 함수에 새 선택적 매개 변수가 있습니다.
이제 함수에 LOG
선택적 기본 매개 변수가 있습니다. 자세한 내용은 LOG(Transact-SQL)를 참조하세요.
분할된 인덱스 작업 중 통계 계산이 변경되었습니다.
SQL Server 2014에서는 분할된 인덱스를 만들거나 다시 작성할 때 테이블의 모든 행을 검사하여 통계가 생성되지 않습니다. 대신, 쿼리 최적화 프로그램에서 기본 샘플링 알고리즘을 사용하여 통계를 생성합니다. 분할된 인덱스를 사용하여 데이터베이스를 업그레이드한 후에는 이러한 인덱스에 대한 히스토그램 데이터에 차이가 있을 수 있습니다. 이러한 동작 변경은 쿼리 성능에 영향을 미치지 않을 수 있습니다. 테이블의 모든 행을 검사하여 분할된 인덱스에 대한 통계를 얻으려면 CREATE STATISTICS
절에서 UPDATE STATISTICS
또는 FULLSCAN
를 사용합니다.
XML 값 메서드에 의한 데이터 형식 변환이 변경되었습니다.
xml
데이터 형식의 value
메서드의 내부 동작이 변경되었습니다. 이 메서드는 XML에 대해 XQuery를 수행하고 지정된 SQL Server 데이터 형식의 스칼라 값을 반환합니다. xs 형식을 SQL Server 데이터 형식으로 변환해야 합니다. 이전에는 메서드가 value
내부적으로 원본 값을 xs:string으로 변환한 다음 xs:string을 SQL Server 데이터 형식으로 변환했습니다. SQL Server 2014에서 xs:string으로의 변환은 다음과 같은 경우에 건너뜁니다.
원본 XS 데이터 형식 | 대상 SQL Server 데이터 형식 |
---|---|
바이트 짧은 정수 (int) 정수 길다 부호 없는 바이트 부호 없는 짧은 정수 부호 없는 정수 unsignedLong positiveInteger 음이 아닌 정수 negativeInteger 비음수 정수 |
tinyint 스몰인트 정수 (int) 빅인트 (bigint) 십진수 숫자 |
십진수 | 십진수 숫자 |
떠다니다 | 진짜 / 현실 |
더블 | 떠다니다 |
새 동작은 중간 변환을 건너뛸 수 있는 경우 성능을 향상시킵니다. 그러나 데이터 형식 변환이 실패하면 중간 xs:string 값에서 변환할 때 발생한 오류 메시지와 다른 오류 메시지가 표시됩니다. 예를 들어 값 메서드가 값 100000을 값smallint
으로 변환 int
하지 못한 경우 이전 오류 메시지는 다음과 같습니다.
The conversion of the nvarchar value '100000' overflowed an INT2 column. Use a larger integer column.
SQL Server 2014에서 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 수정된 메시지
SQL Server 2012에서 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 데이터 형식을 null 값과 0으로 비교할 때 함수의 exist()
동작이 변경되었습니다. 다음 예제를 고려하세요.
DECLARE @test XML;
SET @test = null;
SELECT COUNT(1) WHERE @test.exist('/dogs') = 0;
이전 버전에서는 이 비교가 1(true)을 반환합니다. 이제 이 비교는 0(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)