2014년 SQL Server 데이터베이스 엔진 기능의 주요 변경 내용

이 항목에서는 SQL Server 2014 데이터베이스 엔진 및 이전 버전의 SQL Server 호환성이 손상되는 변경에 대해 설명합니다. 이러한 변경으로 이전 버전의 SQL Server를 기반으로 하는 애플리케이션, 스크립트 또는 기능이 손상될 수 있습니다. 업그레이드할 때 이러한 문제가 발생할 수 있습니다. 자세한 내용은 업그레이드 관리자를 사용하여 업그레이드 준비를 참조하세요.

SQL Server 2014의 주요 변경 내용

새로운 문제가 없습니다.

SQL Server 2012의 주요 변경 내용

Transact-SQL

특징 설명
NEXT라는 열 또는 테이블에서 선택 시퀀스는 ANSI 표준 NEXT VALUE FOR 함수를 사용합니다. 테이블 또는 열의 이름이 NEXT이고 테이블 또는 열이 VALUE로 별칭이 지정되고 ANSI 표준 AS를 생략하면 결과 문에서 오류가 발생할 수 있습니다. 해결하려면 ANSI 표준 AS 키워드를 포함합니다. 예를 들어 다시 SELECT NEXT VALUE FROM Table 작성 SELECT NEXT AS VALUE FROM Table 해야 하며 SELECT Col1 FROM NEXT VALUE 다시 작성 SELECT Col1 FROM NEXT AS VALUE해야 합니다.
PIVOT 연산자 데이터베이스 호환성 수준이 110으로 설정된 경우 피벗 연산자는 재귀 CTE(공통 테이블 식) 쿼리에서 허용되지 않습니다. 쿼리를 다시 작성하거나 호환성 수준을 100 이하로 변경합니다. 재귀 CTE 쿼리에서 PIVOT을 사용하면 그룹화당 행이 하나 이상 있을 때 잘못된 결과가 생성됩니다.
sp_setapprole 및 sp_unsetapprole 쿠키 OUTPUT 매개 변수 sp_setapprole 는 현재 올바른 최대 길이로 varbinary(8000) 문서화되어 있습니다. 그러나 현재 구현은 .를 반환합니다 varbinary(50). 향후 릴리스에서 쿠키 반환 크기가 증가하는 경우 애플리케이션이 계속 올바르게 작동하도록 애플리케이션은 계속 예약 varbinary(8000) 해야 합니다. 자세한 내용은 sp_setapprole(Transact-SQL)를 참조하세요.
EXECUTE AS 쿠키 OUTPUT 매개 변수 EXECUTE AS 는 현재 올바른 최대 길이로 varbinary(8000) 문서화되어 있습니다. 그러나 현재 구현은 .를 반환합니다 varbinary(100). 향후 릴리스에서 쿠키 반환 크기가 증가하는 경우 애플리케이션이 계속 올바르게 작동하도록 애플리케이션은 계속 예약 varbinary(8000) 해야 합니다. 자세한 내용은 (Transact-SQL)를 참조하세요EXECUTE AS.
sys.fn_get_audit_file 함수 사용자 정의 감사 이벤트를 지원하기 위해 두 개의 추가 열(user_defined_event_iduser_defined_information)이 추가되었습니다. 이름으로 열을 선택하지 않는 애플리케이션은 예상보다 많은 열을 반환할 수 있습니다. 이름으로 열을 선택하거나 애플리케이션을 조정하여 이러한 추가 열을 허용합니다.
WITHIN 예약 키워드 WITHIN은 이제 예약된 키워드입니다. 'within'이라는 개체 또는 열에 대한 참조가 실패합니다. 개체 또는 열 이름의 이름을 바꾸거나 대괄호 또는 따옴표를 사용하여 이름을 구분합니다. SELECT * FROM [within]을 예로 들 수 있습니다.
형식 time 의 계산 열에 대한 CAST 및 CONVERT 작업 또는 datetime2 이전 버전의 SQL Server에서는 계산 열 식에서 time 두 형식이 사용되는 경우를 제외하고 CAST 및 CONVERT 작업 및 datetime2 데이터 형식의 기본 스타일은 121입니다. 계산 열의 경우 기본 스타일은 0입니다. 이 동작은 자동 매개 변수화와 관련된 쿼리에서 이러한 연산이 만들어지고 사용될 때 또는 제약 조건 정의에 사용될 때 계산 열에 영향을 줍니다.

호환성 수준 110에서 CAST 및 CONVERT 작업 및 datetime2 데이터 형식의 time 기본 스타일은 항상 121입니다. 쿼리에 이전 동작이 적용되는 경우 110보다 낮은 호환성 수준을 사용하거나, 해당 쿼리에서 스타일 0을 명시적으로 지정해야 합니다.

데이터베이스를 호환성 수준 110으로 업그레이드해도 디스크에 저장된 사용자 데이터는 변경되지 않습니다. 수동으로 이 데이터를 적절하게 수정해야 합니다. 예를 들어 SELECT INTO를 사용하여 위에서 설명한 계산 열 식이 포함된 원본에서 테이블을 만든 경우 계산 열 정의 자체가 아닌 데이터(스타일 0 사용)가 저장됩니다. 스타일 121과 일치하도록 이 데이터를 수동으로 업데이트해야 합니다.
ALTER TABLE 이 문은 ALTER TABLE 두 부분으로 구성된(schema.object) 테이블 이름만 허용합니다. 이제 다음 형식을 사용하여 테이블 이름을 지정하면 컴파일 시 오류 117로 실패합니다.

server.database.schema.table

.database.schema.table

.. schema.table

server.database.schema.table 형식을 지정하는 이전 버전에서는 오류 4902를 반환했습니다. .database.schema.table 형식 또는 .형식 지정 schema.table이 성공했습니다. 이 문제를 해결하려면 4부로 구성된 접두사 사용을 제거합니다.
메타데이터 찾아보기 이제 FOR BROWSE 또는 SET NO_BROWSETABLE ON을 사용하여 뷰를 쿼리하면 기본 개체의 메타데이터가 아닌 뷰의 메타데이터가 반환됩니다. 이 동작은 이제 메타데이터를 검색하는 다른 방법과 일치합니다.
SOUNDEX 데이터베이스 호환성 수준 110에서 SOUNDEX 함수는 함수에서 계산한 값이 이전 호환성 수준에서 계산된 값과 다를 수 있는 새 규칙을 구현합니다. 호환성 수준 110으로 업그레이드한 후 SOUNDEX 함수를 사용하는 인덱스, 힙 또는 CHECK 제약 조건을 다시 빌드해야 할 수 있습니다. 자세한 내용은 SOUNDEX(Transact-SQL)를 참조하세요.
실패한 DML 문에 대한 행 개수 메시지 2012년 SQL Server 데이터베이스 엔진 DML 문이 실패하면 클라이언트에 RowCount: 0을 사용하여 TDS DONE 토큰을 일관되게 보냅니다. 이전 버전의 SQL Server 실패한 DML 문이 TRY-CATCH 블록에 포함되어 있고 데이터베이스 엔진 의해 자동 매개 변수화되거나 TRY-CATCH 블록이 실패한 문과 동일한 수준에 있지 않을 때 잘못된 -1 값이 클라이언트로 전송됩니다. 예를 들어 TRY-CATCH 블록이 저장 프로시저를 호출하고 프로시저의 DML 문이 실패하면 클라이언트가 -1 값을 잘못 받습니다.

이 잘못된 동작을 사용하는 애플리케이션은 실패합니다.
SERVERPROPERTY('Edition') SQL Server 2012 인스턴스의 제품 버전이 설치되었습니다. 이 속성의 값을 사용하여 설치된 제품에서 지원하는 CPU의 최대 수와 같은 기능 및 제한을 확인합니다.

설치된 Enterprise edition 따라 'Enterprise Edition' 또는 'Enterprise Edition: 코어 기반 라이선스'를 반환할 수 있습니다. Enterprise 버전은 단일 SQL Server 인스턴스별로 최대 컴퓨팅 용량을 기준으로 구분됩니다. SQL Server 2012의 컴퓨팅 용량 제한에 대한 자세한 내용은 SQL Server 버전별 컴퓨팅 용량 제한을 참조하세요.
CREATE LOGIN CREATE LOGIN WITH PASSWORD = ' 암호' HASHED 옵션은 SQL Server 7 이하에서 만든 해시와 함께 사용할 수 없습니다.
에 대한 CAST 및 CONVERT 작업 datetimeoffset 날짜 및 시간 형식에서 0 또는 1로 변환할 datetimeoffset 때 지원되는 유일한 스타일입니다. 다른 모든 변환 스타일은 오류 9809를 반환합니다. 예를 들어 다음 코드는 오류 9809를 반환합니다.

SELECT CONVERT(date, CAST('7070-11-25 16:25:01.00986 -02:07' as datetimeoffset(5)), 107);

동적 관리 뷰

보기 설명
sys.dm_exec_requests 명령 열이 .로 nvarchar(16) 변경되었습니다 nvarchar(32).
sys.dm_os_memory_cache_counters 다음 열의 이름이 바뀌었습니다.

이제 single_pages_kb 다음과 같습니다.
pages_kb

multi_pages_kb
is now: pages_in_use_kb
sys.dm_os_memory_cache_entries 열 pages_allocated_count 열의 이름이 pages_kb 변경되었습니다.
sys.dm_os_memory_clerks 열 multi_pages_kb 제거되었습니다.

열 single_pages_kb 열의 이름이 pages_kb 변경되었습니다.
sys.dm_os_memory_nodes 다음 열의 이름이 바뀌었습니다.

이제 single_pages_kb 다음과 같습니다.
pages_kb

multi_pages_kb 현재는 다음과 같습니다.
foreign_committed_kb
sys.dm_os_memory_objects 다음 열의 이름이 바뀌었습니다.

이제 pages_allocated_count 다음과 같습니다.
pages_in_bytes

max_pages_allocated_count: max_pages_in_bytes
sys.dm_os_sys_info 다음 열의 이름이 바뀌었습니다.

이제 physical_memory_in_bytes 다음과 같습니다.
physical_memory_kb

bpool_commit_target 현재는 다음과 같습니다.
committed_target_kb

bpool_visible 현재는 다음과 같습니다.
visible_target_kb

virtual_memory_in_bytes 현재는 다음과 같습니다.
virtual_memory_kb

bpool_commited 현재는 다음과 같습니다.
committed_kb
sys.dm_os_workers 로캘 열이 제거되었습니다.

카탈로그 보기

보기 설명
sys.data_spaces

sys.partition_schemes

sys.filegroups

sys.partition_functions
is_system 새 열이 sys.data_spaces 및 sys.partition_functions 추가되었습니다. (sys.partition_schemes 및 sys.filegroups는 sys.data_spaces 열을 상속합니다.)

이 열의 값이 1이면 개체가 전체 텍스트 인덱스 조각에 사용됨을 나타냅니다.

sys.partition_functions, sys.partition_schemes 및 sys.filegroups에서 새 열은 마지막 열이 아닙니다. 이러한 카탈로그 뷰에서 반환되는 열의 순서를 사용하는 기존 쿼리를 수정합니다.

SQL CLR 데이터 형식(geometry, geography 및 hierarchyid)

공간 데이터 형식 및 hierarchyid 형식을 포함하는 어셈블리 Microsoft.SqlServer.Types.dll버전 10.0에서 버전 11.0으로 업그레이드되었습니다. 다음 조건이 충족되면 이 어셈블리를 참조하는 사용자 지정 애플리케이션이 실패할 수 있습니다.

  • SQL Server 2008 R2가 설치된 컴퓨터에서 SQL Server 2014만 설치된 컴퓨터로 사용자 지정 애플리케이션을 이동하면 참조된 SqlTypes 어셈블리 버전 10.0이 없기 때문에 애플리케이션이 실패합니다. 다음 오류 메시지가 표시 될 수 있습니다. "Could not load file or assembly 'Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified."

  • SqlTypes 어셈블리 버전 11.0을 참조하고 버전 10.0도 설치되면 다음 오류 메시지가 표시될 수 있습니다."System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'."

  • .NET 3.5, 4 또는 4.5를 대상으로 하는 사용자 지정 애플리케이션에서 SqlTypes 어셈블리 버전 11.0을 참조하면 SqlClient by design에서 어셈블리 버전 10.0을 로드하므로 애플리케이션이 실패합니다. 이 오류는 애플리케이션이 다음 방법 중 하나를 호출할 때 발생합니다.

    • GetValue 클래스의 SqlDataReader 메서드

    • GetValues 클래스의 SqlDataReader 메서드

    • 클래스의 대괄호 인덱스 연산자 SqlDataReader []

    • ExecuteScalar 클래스의 SqlCommand 메서드

다음 방법 중 하나를 사용하여 이 문제를 해결할 수 있습니다.

  • 다음 예제와 같이 위에 나열된 Get 메서드 대신 메서드를 호출 GetSqlBytes 하여 CLR SQL Server 시스템 형식을 검색하여 코드에서 이 문제를 해결할 수 있습니다.

    string query = "SELECT [SpatialColumn] FROM [SpatialTable]";  
          using (SqlConnection conn = new SqlConnection("..."))  
          {  
                SqlCommand cmd = new SqlCommand(query, conn);  
    
                conn.Open();  
                SqlDataReader reader = cmd.ExecuteReader();  
    
                while (reader.Read())  
                {  
                      // In version 11.0 only  
                      SqlGeometry g =   
    SqlGeometry.Deserialize(reader.GetSqlBytes(0));  
    
                      // In version 10.0 or 11.0  
                      SqlGeometry g2 = new SqlGeometry();  
                      g.Read(new BinaryReader(reader.GetSqlBytes(0).Stream));  
                }  
          }  
    
  • 다음 예제와 같이 애플리케이션 구성 파일에서 어셈블리 리디렉션을 사용하여 이 문제를 해결할 수 있습니다.

    <runtime>  
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
        ...  
        <dependentAssembly>  
            <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />  
            <bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" />  
        </dependentAssembly>  
        ...  
    </assemblyBinding>  
    <runtime>  
    
  • "Type System Version" 특성에 대해 "SQL Server 2012" 값을 지정하여 SqlClient가 어셈블리의 버전 11.0을 강제로 로드하도록 하여 연결 문자열 이 문제를 해결할 수 있습니다. 이 연결 문자열 특성은 .NET 4.5 이상에서만 사용할 수 있습니다.

  • 태그는 assemblyBinding 태그 아래에 runtime 래핑되어야 합니다.

AWE 지원

32비트 AWE(Address Windowing Extensions) 지원은 중단되었습니다. 이로 인해 32비트 운영 체제의 성능이 저하될 수 있습니다. 많은 양의 메모리를 사용하는 설치의 경우 64비트 운영 체제로 마이그레이션합니다.

XQuery 함수가 Surrogate-Aware

XQuery 함수 및 연산자의 W3C 권장 사항을 사용하려면 높은 범위의 유니코드 문자를 나타내는 서로게이트 쌍을 UTF-16 인코딩의 단일 문자 모양으로 계산해야 합니다. 그러나 2012년 SQL Server 이전 버전의 SQL Server 문자열 함수는 서로게이트 쌍을 단일 문자로 인식하지 못했습니다. 문자열 길이 계산 및 부분 문자열 추출과 같은 일부 문자열 작업은 잘못된 결과를 반환했습니다. SQL Server 2012는 이제 UTF-16 및 서로게이트 쌍의 올바른 처리를 완전히 지원합니다.

SQL Server XML 데이터 형식은 올바른 형식의 서로게이트 쌍만 허용합니다. 그러나 일부 함수는 잘못된 또는 부분 서로게이트 쌍을 XQuery 함수에 문자열 값으로 전달할 수 있으므로 특정 상황에서 정의되지 않거나 예기치 않은 결과를 반환할 수 있습니다. SQL Server XQuery를 사용할 때 문자열 값을 생성하는 방법은 다음과 같습니다.

  • 상수 문자열 값을 이진 값으로 제공합니다. 이 메서드를 사용하는 경우 유효하지 않거나 부분적인 서로게이트 쌍을 전달할 수 있습니다.

  • 문자 엔터티를 제공하여 상수 문자열 값을 제공합니다. 이 메서드를 사용하는 경우 잘못된 서로게이트 쌍을 전달할 수 없습니다. XQuery 함수에는 상위 문자에 단일 문자 엔터티가 필요합니다. 이러한 함수는 서로게이트 쌍 문자에 대한 문자 엔터티가 제공되면 오류를 발생합니다.

  • sql:column 또는 sql:variable을 사용하여 외부 값을 가져옵니다. 이러한 메서드를 사용하는 경우 유효하지 않거나 부분적인 서로게이트 쌍을 도입할 수 있습니다.

영향을 받는 XQuery 함수 및 연산자

다음 XQuery 함수 및 연산자는 이제 2012년 SQL Server UTF-16 서로게이트 쌍을 올바르게 처리합니다.

  • fn:string-length. 그러나 유효하지 않거나 부분적인 서로게이트 쌍이 인수로 전달되는 경우 문자열 길이 동작은 정의되지 않습니다.

  • fn:substring.

  • fn:contains. 그러나 부분 서로게이트 쌍이 값으로 전달되는 경우 올바른 형식의 서로게이트 쌍에 포함된 부분 서로게이트 쌍을 찾을 수 있으므로 포함 이 예기치 않은 결과를 반환할 수 있습니다.

  • fn:concat. 그러나 부분 서로게이트 쌍이 값으로 전달되는 경우 concat 은 잘못된 서로게이트 쌍 또는 부분 서로게이트 쌍을 생성할 수 있습니다.

  • 비교 연산자와 order by 절. 비교 연산자는 +, , <, ><=, =, >, eq, leltgtge를 포함합니다.

시스템 프로시저에 대한 분산 쿼리 호출

2012년 SQL Server 한 서버에서 다른 서버로 호출될 때 일부 시스템 프로시저를 통한 OPENQUERY 분산 쿼리 호출이 실패합니다. 이 문제는 데이터베이스 엔진 프로시저에 대한 메타데이터를 검색할 수 없는 경우에 발생합니다. SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo')을 예로 들 수 있습니다.

격리 수준 및 sp_reset_connection

연결에 대한 격리 수준은 클라이언트 드라이버에서 다음과 같은 방식으로 처리됩니다.

  • 모든 네이티브 드라이버(SNAC, MDAC, ODBC)는 sp_reset_connection 따라 격리 수준(앱 설정 기준)을 설정합니다.

  • ADO의 경우.NET 기본적으로 풀에서 가져오는 연결(애플리케이션에서 다른 격리 수준을 사용하는 경우)에 따라 임의 격리 수준을 얻습니다. ADO.NET 풀은 내부적으로 투명하게 연결을 재활용할 수 있으므로 풀에서 나오는 항목을 예측할 수 없습니다.

  • JDBC 드라이버의 경우 ADO와 동일한 동작을 얻습니다.NET

    애플리케이션이 원하는 것을 얻으려면 연결을 연 후 항상 명시적으로 격리 수준을 설정해야 합니다.

    JDBC 연결을 풀화할 수 있으므로 애플리케이션은 임의 격리 수준을 얻을 수 있으며 이에 대해 알지 못할 수 있습니다.

이전 버전과의 호환성을 유지하기 위해 이 새 동작은 TDS 7.4부터 최근 클라이언트에만 적용됩니다.

이전 버전과의 호환성

새로운 동작은 호환성 수준에 따라 달라집니다.

다음 함수 및 연산자는 호환성 수준이 110 이상인 경우에만 위에서 설명한 새로운 동작을 보여 줍니다.

  • fn:contains.

  • fn:concat.

  • 비교 연산자 및 order by

새 동작은 함수의 기본 네임스페이스 URI에 따라 달라집니다.

다음 함수는 기본 네임스페이스 URI가 최종 권장 사항의 네임스페이스에 해당하는 경우에만 위에서 설명한 새 동작을 http://www.w3.org/2005/xpath-functions보여 줍니다. 호환성 수준이 110 이상인 경우 기본적으로 SQL Server 2012는 기본 함수 네임스페이스를 이 네임스페이스에 바인딩합니다. 그러나 이러한 함수는 호환성 수준에 관계없이 이 네임스페이스를 사용할 때 새 동작을 보여 줍니다.

  • fn:string-length

  • fn:substring

SQL Server 2008/SQL Server 2008R2의 주요 변경 내용

이 섹션에는 2008년 SQL Server 도입된 주요 변경 내용이 포함되어 있습니다. SQL Server 2008 R2에서는 변경 사항이 도입되지 않았습니다.

Collations

특징 설명
새 데이터 정렬 SQL Server 2008에서는 Windows Server 2008에서 제공하는 데이터 정렬과 완전히 일치하는 새로운 데이터 정렬이 도입되었습니다. 이러한 80개의 새로운 데이터 정렬은 언어 정확도를 향상했으며 *_100 버전 참조로 표시됩니다. 서버 또는 데이터베이스에 대한 새 데이터 정렬을 선택하는 경우 이전 클라이언트 드라이버가 있는 클라이언트에서 데이터 정렬을 인식하지 못할 수 있습니다. 인식할 수 없는 데이터 정렬로 인해 애플리케이션이 오류를 반환하고 실패할 수 있습니다. 다음과 같은 해결 방법을 고려해 보세요.

기본 시스템 데이터 정렬이 업데이트되도록 클라이언트 운영 체제를 업그레이드합니다.

클라이언트에 데이터베이스 클라이언트 소프트웨어가 설치된 경우 데이터베이스 클라이언트 소프트웨어에 서비스 업데이트를 적용하는 것이 좋습니다.

클라이언트의 코드 페이지에 매핑되는 기존 데이터 정렬을 선택합니다.

CLR(공용 언어 런타임)

특징 설명
CLR 어셈블리 데이터베이스가 SQL Server 2008 Microsoft.SqlServer.Types 로 업그레이드되면 새 데이터 형식을 지원하는 어셈블리가 자동으로 설치됩니다. 업그레이드 관리자 규칙은 이름이 충돌하는 사용자 유형 또는 어셈블리를 검색합니다. 업그레이드 관리자는 충돌하는 어셈블리의 이름을 변경하고 충돌하는 형식의 이름을 바꾸거나 코드에서 두 부분으로 구성된 이름을 사용하여 기존 사용자 유형을 참조하는 것이 좋습니다.

데이터베이스 업그레이드에서 이름이 충돌하는 사용자 어셈블리를 검색하면 해당 어셈블리의 이름이 자동으로 바뀌고 데이터베이스가 의심 모드로 전환됩니다.

업그레이드 중에 이름이 충돌하는 사용자 형식이 발견된 경우에는 특별한 조치가 취해지지 않습니다. 업그레이드 후에는 기존 사용자 형식과 새 시스템 형식이 모두 존재하게 됩니다. 사용자 형식은 두 부분으로 된 이름을 통해서만 사용할 수 있습니다.
CLR 어셈블리 SQL Server 2008은 GAC(전역 어셈블리 캐시)의 라이브러리를 업데이트하는 .NET Framework 3.5 SP1을 설치합니다. 지원되지 않는 라이브러리가 SQL Server 데이터베이스에 등록된 경우 SQL Server 애플리케이션은 SQL Server 2008로 업그레이드한 후 작동이 중지될 수 있습니다. 이는 GAC에서 라이브러리를 서비스하거나 업그레이드해도 SQL Server 내부의 어셈블리가 업데이트되지 않기 때문입니다. 어셈블리가 SQL Server 데이터베이스와 GAC 모두에 있는 경우 어셈블리의 두 복사본이 정확히 일치해야 합니다. 일치하지 않으면 SQL Server CLR 통합에서 어셈블리를 사용할 때 오류가 발생합니다. 자세한 내용은 지원되는 .NET Framework 라이브러리를 참조하세요.

데이터베이스를 업그레이드한 후 문을 사용하여 SQL Server 데이터베이스 내에서 어셈블리의 복사본을 서비스하거나 업그레이드합니다ALTER ASSEMBLY. 자세한 내용은 기술 자료 문서 949080을 참조하세요.

애플리케이션에서 지원되지 않는 .NET 프레임워크 라이브러리를 사용하고 있는지 여부를 감지하려면 데이터베이스에서 다음 쿼리를 실행합니다.

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';
CLR 루틴 CLR 사용자 정의 함수, 사용자 정의 집계 또는 UDT(사용자 정의 형식) 내에서 가장을 사용하면 SQL Server 2008로 업그레이드한 후 오류 6522로 인해 애플리케이션이 실패할 수 있습니다. 다음 시나리오는 2005년 SQL Server 성공하지만 2008년 SQL Server 실패합니다. 해결 방법은 각 시나리오에 대해 제공됩니다.

가장을 사용하는 CLR 사용자 정의 함수, 사용자 정의 집계 또는 UDT 메서드에는 형식nvarchar(max), , varchar(max)varbinary(max), ntext, textimage또는 큰 UDT의 매개 변수가 있으며 메서드에 DataAccessKind.Read 특성이 없습니다. 이 문제를 해결하려면 메서드에 DataAccessKind.Read 특성을 추가하고, 어셈블리를 다시 컴파일하고, 루틴과 어셈블리를 다시 배포합니다.

가장을 수행하는 Init 메서드가 있는 CLR 테이블 반환 함수입니다. 이 문제를 해결하려면 메서드에 DataAccessKind.Read 특성을 추가하고, 어셈블리를 다시 컴파일하고, 루틴 및 어셈블리를 다시 배포합니다.

가장을 수행하는 FillRow 메서드가 있는 CLR 테이블 반환 함수입니다. 이 문제를 해결하려면 FillRow 메서드에서 가장을 제거합니다. FillRow 메서드를 사용하여 외부 리소스에 액세스하지 마세요. 대신 Init 메서드에서 외부 리소스에 액세스합니다.

동적 관리 뷰

보기 설명
sys.dm_os_sys_info cpu_ticks_in_ms 및 sqlserver_start_time_cpu_ticks 열을 제거했습니다.
sys.dm_exec_query_resource_semaphoressys.dm_exec_query_memory_grants resource_semaphore_id 열은 2008년 SQL Server 고유 ID가 아닙니다. 이 변경 내용은 쿼리 실행 문제 해결에 영향을 줄 수 있습니다. 자세한 내용은 sys.dm_exec_query_resource_semaphores(Transact-SQL)를 참조하세요.

오류 및 이벤트

특징 설명
로그인 오류 2005년 SQL Server SQL 로그인을 사용하여 Windows 인증만 사용하도록 구성된 서버에 연결하는 경우 오류 18452가 반환됩니다. 2008년 SQL Server 오류 18456이 대신 반환됩니다.

쇼플랜

특징 설명
실행 계획 XML 스키마 SeekPredicateNew 요소가 Showplan XML 스키마에 추가되고 바깥쪽 xsd 시퀀스(SqlPredicatesType)가 xsd:choice> 항목으로< 변환됩니다. 하나 이상의 SeekPredicate 요소 대신 하나 이상의 SeekPredicateNew 요소가 이제 실행 계획 XML에 나타날 수 있습니다. 두 요소는 상호 배타적입니다. SeekPredicate는 이전 버전과의 호환성을 위해 실행 계획 XML 스키마에서 유지 관리됩니다. 그러나 SQL Server 2008에서 만든 쿼리 계획에는 SeekPredicateNew 요소가 포함될 수 있습니다. SeekPredicate 요소가 없는 경우 ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates 노드에서 SeekPredicate 자식만 검색할 것으로 예상되는 애플리케이션은 실패할 수 있습니다. 이 노드에서 SeekPredicate 또는 SeekPredicateNew 요소를 예상하도록 애플리케이션을 다시 작성합니다. 자세한 내용은 를 참조하세요.
실행 계획 XML 스키마 IndexKind 특성이 실행 계획 XML 스키마의 ObjectType 복합 형식에 추가됩니다. SQL Server 2005 스키마에 대해 SQL Server 계획의 유효성을 엄격하게 검사하는 애플리케이션은 실패합니다.

Transact-SQL

특징 설명
ALTER_AUTHORIZATION_DATABASE DDL 이벤트 2005년 SQL Server DDL 이벤트가 발생할 ALTER_AUTHORIZATION_DATABASE 때 DDL(데이터 정의 언어) 작업에서 보안 개체의 엔터티 형식이 개체인 경우 이 이벤트에 대한 EVENTDATA xml의 ObjectType 요소에 'object' 값이 반환됩니다. 2008년 SQL Server 실제 형식(예: 'table' 또는 'function')이 반환됩니다.
CONVERT 잘못된 스타일이 CONVERT 함수에 전달되면 변환 형식이 문자로 이진 또는 문자에서 이진으로 변환될 때 오류가 반환됩니다. 이전 버전의 SQL Server 잘못된 스타일은 이진-문자 변환 및 문자-이진 변환의 기본 스타일로 설정됩니다.
GRANT/DENY/REVOKE 어셈블리의 EXECUTE EXECUTE 권한을 어셈블리에 부여, 거부 또는 취소할 수 없습니다. 이 권한은 영향을 주지 않으며 이제 오류가 발생합니다. 대신 어셈블리 메서드를 참조하는 저장 프로시저 또는 함수에 대한 EXECUTE 권한을 부여, 거부 또는 취소합니다.
GRANT시스템 유형에 대한 /DENY/REVOKE 권한 시스템 유형에 대한 사용 권한을 부여, 거부 또는 취소할 수 없습니다. 이전 버전의 SQL Server 이러한 문은 성공하지만 아무런 영향을 미치지 않습니다. 2008년 SQL Server 오류가 반환됩니다.
GROUP BY (그룹화를 위한 SQL 구문) GROUP BY 절은 목록별로 그룹에 사용되는 식에 하위 쿼리를 포함할 수 없습니다. 이전 버전의 SQL Server 허용되었습니다. 2008년 SQL Server 오류 144가 반환됩니다.

예를 들어 다음 코드는 2005년 SQL Server 성공하고 2008년 SQL Server 실패합니다.

DECLARE @Test TABLE(a int NOT NULL);
INSERT INTO @Test SELECT 1 union ALL SELECT 2;
SELECT COUNT(*)
FROM @Test
GROUP BY CASE WHEN a IN (SELECT t.a FROM @Test AS t)
THEN 1 ELSE 0
END;
OUTPUT 절 비결정적 동작을 방지하기 위해 OUTPUT 절은 다음 방법 중 하나로 해당 열을 정의할 때 뷰 또는 인라인 테이블 반환 함수에서 열을 참조할 수 없습니다.

하위 쿼리.

사용자 또는 시스템 데이터 액세스를 수행하거나 이러한 액세스를 수행하는 것으로 간주되는 사용자 정의 함수입니다.

사용자 또는 시스템 데이터 액세스를 수행하는 사용자 정의 함수를 정의에 포함하는 계산 열입니다.



SQL Server OUTPUT 절에서 이러한 열을 검색하면 오류 4186이 발생합니다. 자세한 내용은 MSSQLSERVER_4186 참조하세요.
OUTPUT INTO 절 OUTPUT INTO 절의 대상 테이블에는 활성화된 트리거가 있을 수 없습니다.
사전 계산 순위 서버 수준 옵션 이 옵션은 SQL Server 2008에서 지원되지 않습니다. 가능한 한 빨리 이 기능을 사용하는 애플리케이션을 수정합니다.
READPAST 테이블 힌트 스냅샷 격리에서는 READPAST 힌트를 지정할 수 없습니다.

READ_COMMITED_SNAPSHOT 또는 ALLOW_SNAPSHOT_ISOLATION 데이터베이스 옵션이 ON으로 설정된 경우 READPAST 힌트는 무시됩니다. 그러나 READPAST 힌트를 READCOMMITTEDLOCK과 결합하는 경우 READPAST 동작은 차단 READCOMMITTED 힌트와 동일합니다.
sp_helpuser sp_helpuser 저장 프로시저의 결과 집합에서 반환되는 다음 열 이름이 변경되었습니다.

GroupName은 이제 다음과 같습니다.
역할 이름

이제 Group_name 다음과 같습니다.
Role_name

Group_id 현재는 다음과 같습니다.
Role_id

Users_in_group 현재는 다음과 같습니다.
Users_in_role
투명한 데이터 암호화 TDE(투명한 데이터 암호화)는 I/O 수준에서 수행됩니다. 페이지 구조는 메모리에서 암호화되지 않으며 페이지가 디스크에 기록될 때만 암호화됩니다. 데이터베이스 파일과 로그 파일은 모두 암호화됩니다. 데이터 또는 로그 파일을 직접 검사하는 등 페이지에 액세스하기 위한 일반 SQL Server 메커니즘을 우회하는 타사 애플리케이션은 데이터베이스가 TDE를 사용하는 경우 파일에서 데이터가 암호화되기 때문에 실패합니다. 이러한 애플리케이션은 Window Cryptographic API를 활용하여 SQL Server 외부에서 데이터를 해독하기 위한 솔루션을 개발할 수 있습니다.

XQuery

특징 설명
날짜/시간 지원 2005년 SQL Server 데이터 형식xs:timexs:datexs:dateTime 표준 시간대를 지원하지 않습니다. 표준 시간대 데이터는 UTC 표준 시간대에 매핑됩니다. SQL Server 2008에서는 표준 준수 동작을 제공하므로 다음과 같은 변경이 발생합니다.

표준 시간대가 없는 값의 유효성이 검사됩니다.

제공된 표준 시간대 또는 표준 시간대가 없는 경우 보존됩니다.

내부 스토리지 표현이 수정됩니다.

저장된 값의 해상도가 증가합니다.

음수 연도는 허용되지 않습니다.



참고: 새 형식 값을 고려하도록 애플리케이션 및 XQuery 식을 수정합니다.
XQuery 및 Xpath 식 SQL Server 2005에서는 콜론(':')으로 시작하는 XQuery 또는 XPath 식의 단계가 허용됩니다. 예를 들어 다음 문에는 콜론으로 시작하는 경로 식 내에서 이름 테스트CTR02) 가 포함됩니다.

SELECT FileContext.query('for n$ in //CTR return <C>{data )(n$/:CTR02)} </C>) AS Files FROM dbo.MyTable;

SQL Server 2008에서는 XML 표준을 준수하지 않으므로 이 사용이 허용되지 않습니다. 오류 9341이 반환됩니다. 선행 콜론을 제거하거나 이름 테스트에 대한 접두사를 지정합니다(예: n$/CTR02) 또는 (n$/p1:CTR02).

Connecting

특징 설명
SSL을 사용하여 SQL Server Native Client에서 연결 SQL Server Native Client와 연결할 때 "SERVER=shortname; FORCE ENCRYPTION=true"이고, 주체가 FQDN(정규화된 도메인 이름)을 지정하는 인증서는 완화된 유효성 검사로 인해 과거에 연결되었습니다. SQL Server 2008 R2는 인증서에 FQDN 주체를 적용하여 보안을 강화합니다. 완화된 유효성 검사를 사용하는 애플리케이션은 다음 작업 중 하나를 수행해야 합니다.

연결 문자열 FQDN을 사용합니다.

-이 옵션은 연결 문자열 SERVER 키워드가 애플리케이션 외부에서 구성된 경우 애플리케이션을 다시 컴파일할 필요가 없습니다.

-이 옵션은 연결 문자열이 하드 코딩된 애플리케이션에서 작동하지 않습니다.

- 미러된 서버가 간단한 이름으로 회신하기 때문에 데이터베이스 미러링을 사용하는 애플리케이션에서는 이 옵션이 작동하지 않습니다.
FQDN에 매핑할 줄임표의 별칭을 추가합니다.

-이 옵션은 연결 문자열이 하드 코딩된 애플리케이션에서도 작동합니다.

- 공급자가 수신된 장애 조치(failover) 파트너 이름에 대한 별칭을 조회하지 않으므로 데이터베이스 미러링을 사용하는 애플리케이션에서는 이 옵션이 작동하지 않습니다.
짧은 이름으로 인증서를 발급합니다.

-이 옵션은 모든 애플리케이션에서 작동합니다.

SQL Server 2005의 주요 변경 내용

보관 웹 페이지 집합에서 매우 오래된 버전의 Microsoft SQL Server 대한 설명서를 누적하고 보존합니다. 보관된 웹 페이지는 Bing.com 및 Google.com 같은 검색 엔진에서 처리되지 않습니다. 하지만 이러한 보관 파일은 Docs 이전 버전/ 주소에서 확인할 수 있습니다.

이러한 보관 파일에는 최소한 다음과 같은 이전 버전에 대한 설명서가 포함되어 있습니다.

  • SQL Server 2014
  • SQL Server 2012년
  • SQL Server 2008 R2
  • SQL Server 2008년
  • SQL Server 2005년

SQL Server 2014 설명서는 보관되었으며 검색 엔진에서 더 이상 처리되지 않습니다. 2014 년 문서는 이제 NOINDEX 및 NOFOLLOW로 자신을 선언합니다.

최신 버전의 SQL Server 다른 최신 버전과 함께 여기에 설명되어 있습니다.

또한 참조하십시오

2014년 SQL Server 사용되지 않는 데이터베이스 엔진 기능
SQL Server 2014의 데이터베이스 엔진 기능에 대한 동작 변경 내용
SQL Server 2014에서 지원되지 않는 데이터베이스 엔진 기능
SQL Server 데이터베이스 엔진의 이전 버전과의 호환성
ALTER DATABASE 호환성 수준(Transact-SQL)
2014년 SQL Server 관리 도구 기능의 주요 변경 내용