ALTER DATABASE(Transact-SQL) 호환성 수준ALTER DATABASE (Transact-SQL) Compatibility Level

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)예Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

특정 데이터베이스 동작이 지정된 버전의 SQL ServerSQL Server와 호환되도록 설정합니다.Sets certain database behaviors to be compatible with the specified version of SQL ServerSQL Server. 다른 ALTER DATABASE 옵션은 ALTER DATABASE(Transact-SQL)를 참조하세요.For other ALTER DATABASE options, see ALTER DATABASE (Transact-SQL).

중요

Azure SQL 데이터베이스 관리 되는 인스턴스,이 T-SQL 기능은 특정 동작이 변경 되었습니다.On Azure SQL Database Managed Instance, this T-SQL feature has certain behavior changes. 참조 SQL Server에서 Azure SQL 데이터베이스 관리 되는 인스턴스 T-SQL 차이점 모든 T-SQL 동작 변경 내용에 대 한 세부 정보에 대 한 합니다.See Azure SQL Database Managed Instance T-SQL differences from SQL Server for details for all T-SQL behavior changes.

항목 링크 아이콘 Transact-SQL 구문 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax

ALTER DATABASE database_name   
SET COMPATIBILITY_LEVEL = { 140 | 130 | 120 | 110 | 100 | 90 }  

인수Arguments

database_namedatabase_name
수정할 데이터베이스의 이름입니다.Is the name of the database to be modified.

COMPATIBILITY_LEVEL { 140 | 130 | 120 | 110 | 100 | 90 | 80 }COMPATIBILITY_LEVEL { 140 | 130 | 120 | 110 | 100 | 90 | 80 }
데이터베이스가 호환되도록 설정할 SQL ServerSQL Server의 버전입니다.Is the version of SQL ServerSQL Server with which the database is to be made compatible. 다음 호환성 수준 값을 구성할 수 있습니다.The following compatibility level values can be configured:

ProductProduct 데이터베이스 엔진 버전Database Engine Version 호환성 수준 지정Compatibility Level Designation 지원되는 호환성 수준 값Supported Compatibility Level Values
SQL Server 2017(14.x)SQL Server 2017 (14.x) 1414 140140 140, 130, 120, 110, 100140, 130, 120, 110, 100
Azure SQL 데이터베이스Azure SQL Database 1212 130130 140, 130, 120, 110, 100140, 130, 120, 110, 100
SQL Server 2016(13.x)SQL Server 2016 (13.x) 1313 130130 130, 120, 110, 100130, 120, 110, 100
SQL Server 2014(12.x)SQL Server 2014 (12.x) 1212 120120 120, 110, 100120, 110, 100
SQL Server 2012(11.x)SQL Server 2012 (11.x) 1111 110110 110, 100, 90110, 100, 90
SQL Server 2008 R2SQL Server 2008 R2 10.510.5 100100 100, 90, 80100, 90, 80
SQL Server 2008SQL Server 2008 1010 100100 100, 90, 80100, 90, 80
SQL Server 2005SQL Server 2005 99 9090 90, 8090, 80
SQL Server 2000SQL Server 2000 88 8080 8080

참고

2018년 1월 기준으로 Azure SQL 데이터베이스Azure SQL Database에서 새로 만들어진 데이터베이스에 대한 기본 호환성 수준은 140입니다.As of January 2018, in Azure SQL 데이터베이스Azure SQL Database, the default compatibility level is 140 for newly created databases. 기존 데이터베이스에 대해서는 데이터베이스 호환성 수준을 업데이트하지 않습니다.We do not update database compatibility level for existing databases. 이것은 고객의 판단할 문제입니다.This is up to customers to do at their own discretion. 최신 기능 향상을 활용할 수 있게 최신 호환성 수준으로 변경을 고려하는 것이 좋습니다.With that said, we highly recommend customers plan on moving to the latest compatibility level in order to leverage the latest improvements.

데이터베이스 전체에 데이터베이스 호환성 수준 140을 사용하려고 하는데 데이터베이스 호환성 수준 110에 매핑하는 SQL Server 2012(11.x)SQL Server 2012 (11.x)카디널리티 예상 모델을 선호하는 이유가 있다면 ALTER DATABASE SCOPED CONFIGURATION(Transact-SQL) 및 키워드 LEGACY_CARDINALITY_ESTIMATION = ON을 참조하세요.If you want to leverage database compatibility level 140 for your database overall, but you have reason to prefer the cardinality estimation model of SQL Server 2012(11.x)SQL Server 2012 (11.x), mapping to database compatibility level 110, see ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL), and in particular its keyword LEGACY_CARDINALITY_ESTIMATION = ON.

Azure SQL 데이터베이스Azure SQL Database에서 두 호환성 수준 간의 가장 중요한 쿼리의 성능 차이를 평가하는 방법에 대한 내용은 Azure SQL Database에서 호환성 수준 130으로 향상된 쿼리 성능을 참조하세요.For details about how to assess the performance differences of your most important queries, between two compatibility levels on Azure SQL 데이터베이스Azure SQL Database, see Improved Query Performance with Compatibility Level 130 in Azure SQL Database. 이 아티클에서는 호환성 수준 130 및 SQL ServerSQL Server를 참조하나 SQL ServerSQL ServerAzure SQL 데이터베이스Azure SQL Database에 대한 140으로 이동에도 같은 방법론이 적용됩니다.Note that this article refers to compatibility level 130 and SQL ServerSQL Server, but the same methodology applies for moves to 140 for SQL ServerSQL Server and Azure SQL 데이터베이스Azure SQL Database .

다음 쿼리를 실행하여 연결된 데이터베이스 엔진Database Engine의 버전을 확인합니다.Execute the following query to determine the version of the 데이터베이스 엔진Database Engine that you are connected to.

SELECT SERVERPROPERTY('ProductVersion');  

참고

호환성 수준에 따라 달라지는 일부 기능은 Azure SQL 데이터베이스Azure SQL Database에서 지원되지 않습니다.Not all features that vary by compatibility level are supported on Azure SQL 데이터베이스Azure SQL Database.

현재 호환성 수준을 확인하려면 sys.databases(Transact-SQL)compatibility_level 열을 쿼리합니다.To determine the current compatibility level, query the compatibility_level column of sys.databases (Transact-SQL).

SELECT name, compatibility_level FROM sys.databases;  

RemarksRemarks

모든 SQL ServerSQL Server 설치의 경우 기본 호환성 수준은 데이터베이스 엔진Database Engine의 버전으로 설정됩니다.For all installations of SQL ServerSQL Server, the default compatibility level is set to the version of the 데이터베이스 엔진Database Engine. 데이터베이스는 model 데이터베이스의 호환성 수준이 이보다 낮지 않은 한 이 수준으로 설정됩니다.Databases are set to this level unless the model database has a lower compatibility level. 이전 버전의 SQL ServerSQL Server 데이터베이스를 업그레이드할 때 데이터베이스의 호환성 수준이 SQL ServerSQL Server의 해당 인스턴스에 대해 허용된 최소 이상이면 기존 호환성 수준이 유지됩니다.When a database is upgraded from any earlier version of SQL ServerSQL Server, the database retains its existing compatibility level, if it is at least minimum allowed for that instance of SQL ServerSQL Server. 허용된 수준보다 낮은 호환성 수준으로 데이터베이스를 업그레이드하면 데이터베이스를 허용된 가장 낮은 호환성 수준으로 자동 설정합니다.Upgrading a database with a compatibility level lower than the allowed level, automatically sets the database to the lowest compatibility level allowed. 이는 시스템 및 사용자 데이터베이스 모두에 적용됩니다.This applies to both system and user databases.

데이터베이스가 연결 또는 복원된 경우, 그리고 현재 위치 업그레이드 이후에 SQL Server 2017(14.x)SQL Server 2017 (14.x)에서 아래 동작이 예상됩니다.The below behaviors are expected for SQL Server 2017(14.x)SQL Server 2017 (14.x) when a database is attached or restored, and after an in-place upgrade:

  • 사용자 데이터베이스의 호환성 수준이 업그레이드 이전에 100 이상이었다면 업그레이드 후에도 동일하게 유지됩니다.If the compatibility level of a user database was 100 or higher before the upgrade, it remains the same after upgrade.
  • 업그레이드 이전에 사용자데 이터베이스의 호환성 수준이 90이었다면 업그레이드된 데이터베이스에서는 호환성 수준이 SQL Server 2017(14.x)SQL Server 2017 (14.x)에서 지원되는 가장 낮은 호환성 수준인 100으로 설정됩니다.If the compatibility level of a user database was 90 before upgrade, in the upgraded database, the compatibility level is set to 100, which is the lowest supported compatibility level in SQL Server 2017(14.x)SQL Server 2017 (14.x).
  • 업그레이드 후에는 tempdb, 모델, msdb 및 리소스 데이터베이스의 호환성 수준이 현재 호환성 수준으로 설정됩니다.The compatibility levels of the tempdb, model, msdb and Resource databases are set to the current compatibility level after upgrade.
  • master 시스템 데이터베이스는 업그레이드 이전의 호환성 수준으로 유지됩니다.The master system database retains the compatibility level it had before upgrade.

데이터베이스의 호환성 수준을 변경하려면 ALTER DATABASE를 사용합니다.Use ALTER DATABASE to change the compatibility level of the database. 데이터베이스에 대한 새로운 호환성 수준 설정은 USE <database> 명령이 실행되거나 기본 데이터베이스로 해당 데이터베이스 컨텍스트를 사용하여 새 로그인이 처리될 때 적용됩니다.The new compatibility level setting for a database takes effect when a USE <database> command is issued, or a new login is processed with that database as the default database context.
데이터베이스의 현재 호환성 수준을 보려면 sys.databases 카탈로그 뷰에서 compatibility_level 열을 쿼리합니다.To view the current compatibility level of a database, query the compatibility_level column in the sys.databases catalog view.

참고

이전 SQL ServerSQL Server 버전에서 만들어져 SQL Server 2016(13.x)SQL Server 2016 (13.x) RTM 또는 서비스 팩 1로 업그레이드되는 배포 데이터베이스는 호환성 수준이 90이며 다른 데이터베이스에서 지원되지 않습니다.A distribution database that was created in an earlier version of SQL ServerSQL Server and is upgraded to SQL Server 2016(13.x)SQL Server 2016 (13.x) RTM or Service Pack 1 has a compatibility level of 90, which is not supported for other databases. 복제 기능에는 영향을 미치지 않습니다.This does not have an impact on the functionality of replication. 이후의 서비스 팩 및 SQL ServerSQL Server 버전으로 업그레이드하면 master 데이터베이스의 수준에 맞게 배포 데이터베이스의 호환성 수준이 높아집니다.Upgrading to later service packs and versions of SQL ServerSQL Server will result in the compatibility level of the distribution database to be increased to match that of the master database.

호환성 수준 및 SQL Server 업그레이드Compatibility Levels and SQL Server Upgrades

데이터베이스 호환성 수준은 SQL Server 데이터베이스 엔진SQL Server Database Engine를 업그레이드하도록 하여 데이터베이스 현대화를 지원하고, 동일한 사전 업그레이드 데이터베이스 호환성 수준을 유지하여 응용 프로그램 기능 상태를 계속 연결하는 유용한 도구입니다.Database compatibility level is a valuable tool to assist in database modernization, by allowing the SQL Server 데이터베이스 엔진SQL Server Database Engine to be upgraded, while keeping connecting applications functional status by maintaining the same pre-upgrade database compatibility level. 응용 프로그램이 상위 데이터베이스 호환성 수준에서만 사용 가능한 향상 기능을 사용할 필요가 없는 한, SQL Server 데이터베이스 엔진SQL Server Database Engine를 업그레이드하고 이전 데이터베이스 호환성 수준을 유지하는 것이 유효한 접근법입니다.As long as the application does not need to leverage enhancements that are only available in a higher database compatibility level, it is a valid approach to upgrade the SQL Server 데이터베이스 엔진SQL Server Database Engine and maintain the previous database compatibility level. 이전 버전과의 호환성을 위해 호환성 수준을 사용하는 방법에 대한 자세한 내용은 이 아티클의 뒷부분에 나오는 이전 버전과 호환성을 위해 호환성 수준 사용을 참조하세요.For more information on using compatibility level for backward compatibility, see the Using Compatibility Level for Backward Compatibility later in this article.

새로운 개발 작업을 수행하는 경우 또는 기존 응용 프로그램에 새로운 기능과 쿼리 최적화 프로그램 영역의 성능 개선이 필요한 경우 데이터베이스 호환성 수준을 SQL ServerSQL Server에서 사용 가능한 최신 수준으로 업그레이드하고, 응용 프로그램이 해당 호환성 수준과 함께 작동함을 인증하세요.For new development work, or when an existing application requires use of new features, as well as performance improvements done in the query optimizer space, plan to upgrade the database compatibility level to the latest available in SQL ServerSQL Server, and certify your application to work with that compatibility level. 데이터베이스 호환성 수준을 업그레이드하는 방법에 대한 자세한 내용은 이 아티클의 뒷부분에 나오는 데이터베이스 호환성 수준 업그레이드에 대한 모범 사례를 참조하세요.For more details on upgrading the database compatibility level, see the Best Practices for upgrading Database Compatibility Level later in the article.

응용 프로그램이 특정 SQL ServerSQL Server 버전에서 테스트되고 인증된 경우 해당 SQL ServerSQL Server 버전의 원시 데이터베이스 호환성 수준에서 암시적으로 테스트되고 인증된 것입니다.If an application was tested and certified on a given SQL ServerSQL Server version, then it was implicitly tested and certified on that SQL ServerSQL Server version native database compatibility level.

따라서 테스트된 SQL ServerSQL Server 버전에 해당하는 데이터베이스 호환성 수준을 사용할 경우 데이터베이스 호환성 수준은 기존 응용 프로그램에 간편한 인증 경로를 제공합니다.So, database compatibility level provides an easy certification path for an existing application, when using the database compatibility level corresponding to the tested SQL ServerSQL Server version.

호환성 수준 간의 차이점에 대한 자세한 내용은 이 아티클의 뒷부분에 나오는 해당 섹션을 참조하세요.For more information about differences between compatibility levels, see the appropriate sections later in this article.

업그레이드 이전의 데이터베이스 호환성 수준과 지원 가능성 상태를 유지하면서 SQL Server 데이터베이스 엔진SQL Server Database Engine를 최신 버전으로 업그레이드하려면 Microsoft Data Migration Assistant 도구(DMA)를 사용하여 데이터베이스의 응용 프로그램 코드에 대한 정적 기능 노출 영역 유효성 검사를 수행하는 것이 좋습니다.To upgrade the SQL Server 데이터베이스 엔진SQL Server Database Engine to the latest version, while maintaining the database compatibility level that existed before the upgrade and its supportability status, it is recommended to perform static functional surface area validation of the application code in the database, by using the Microsoft Data Migration Assistant tool (DMA). DMA 도구 출력에 누락되거나 호환되지 않는 기능에 대한 오류가 없는 경우 응용 프로그램이 새로운 대상 버전의 기능 회귀로부터 보호됩니다.The absence of errors in the DMA tool output, about missing or incompatible functionality, protects application from any functional regressions on the new target version. DMA 도구에 대한 자세한 내용은 여기를 참조하세요.For more information on the DMA tool, see here.

참고

DMA는 데이터베이스 호환성 수준 100 이상을 지원합니다.DMA supports database compatibility level 100 and above. 원본 버전 SQL Server 2005SQL Server 2005는 제외됩니다. SQL Server 2005SQL Server 2005 as source version is excluded.

중요

Microsoft에서는 업그레이드의 성공 여부를 확인하기 위해 최소한의 테스트를 수행하고, 이전의 데이터베이스 호환성 수준을 유지할 것을 권장합니다.Microsoft recommends that some minimal testing is done to validate the success of an upgrade, while maintaining the previous database compatibility level. 자신의 응용 프로그램 및 시나리오에 의미 있는 최소한의 테스트를 결정해야 합니다.You should determine what minimal testing means for your own application and scenario.

참고

Microsoft에서는 다음과 같은 경우 쿼리 계획 셰이프 보호를 제공합니다.Microsoft provides query plan shape protection when:

  • SQL ServerSQL Server 버전(대상)은 이전 SQL ServerSQL Server 버전(원본)이 실행 중인 하드웨어와 유사한 하드웨어에서 실행됩니다.The new SQL ServerSQL Server version (target) runs on hardware that is comparable to the hardware where the previous SQL ServerSQL Server version (source) was running.
  • 대상 SQL ServerSQL Server 및 원본 SQL ServerSQL Server 모두에서 동일한 지원 데이터베이스 호환성 수준이 사용됩니다.The same supported database compatibility level is used both at the target SQL ServerSQL Server and source SQL ServerSQL Server.

위의 조건에서 발생하는 모든 쿼리 계획 셰이프 회귀(원본 SQL ServerSQL Server 기준)는 해결될 예정입니다.Any query plan shape regression (as compared to the source SQL ServerSQL Server) that occurs in the above conditions will be addressed. 이 경우 Microsoft 고객 지원팀에 문의하세요.Please contact Microsoft Customer Support if this is the case.

이전 버전과의 호환을 위해 호환성 수준 사용Using Compatibility Level for Backward Compatibility

데이터베이스 호환성 수준 설정은 전체 서버가 아닌 지정된 데이터베이스의 동작에만 적용됩니다.The database compatibility level setting affects behaviors only for the specified database, not for the entire server. 데이터베이스 호환성 수준은 부분적으로만 이전 SQL ServerSQL Server 버전과의 호환성을 제공합니다.Database compatibility level provides only partial backward compatibility with earlier versions of SQL ServerSQL Server.
호환성 모드 130부터 기능에 영향을 주는 새로운 쿼리 계획이 새 호환성 수준에만 의도적으로 추가되었습니다.Starting with compatibility mode 130, any new query plan affecting features have been intentionally added only to the new compatibility level. 쿼리 계획 변경으로 인해 성능 저하가 발생하는 업그레이드 중 위험을 최소화하기 위해 이를 수행했습니다.This has been done in order to minimize the risk during upgrades that arise from performance degradation due to query plan changes.
응용 프로그램 관점에서 새로운 기능 중 일부와 쿼리 최적화 프로그램 영역의 성능 개선을 통제된 방법으로 상속하기 위해서는 나중에 언젠가 최신 호환성 수준으로 업그레이드하는 것을 계속 목표로 해야 합니다.From an application perspective, the goal should still be to upgrade to the latest compatibility level at some point in time, in order to inherit some of the new features, as well as performance improvements done in the query optimizer space, but to do so in a controlled way. 더 안전한 마이그레이션 도구로 하위 호환성 수준을 사용하여 관련 호환성 수준 설정에서 제어하는 동작의 버전 차이를 해결할 수 있습니다.Use the lower compatibility level as a safer migration aid to work around version differences, in the behaviors that are controlled by the relevant compatibility level setting. 데이터베이스 호환성 수준 업그레이드에 권장되는 워크플로를 비롯한 자세한 내용은 이 아티클의 뒷부분에 나오는 데이터베이스 호환성 수준 업그레이드에 대한 모범 사례를 참조하세요.For more details, including the recommended workflow for upgrading database compatibility level, see the Best Practices for upgrading Database Compatibility Level later in the article.

중요

지정된 SQL ServerSQL Server 버전에서 도입된 지원되지 않는 기능은 호환성 수준으로 보호되지 않습니다.Discontinued functionality introduced in a given SQL ServerSQL Server version is not protected by compatibility level. 이는 SQL Server 데이터베이스 엔진SQL Server Database Engine에서 제거된 기능을 나타냅니다.This refers to fucntionality that was removed from the SQL Server 데이터베이스 엔진SQL Server Database Engine.

예를 들어 FASTFIRSTROW 힌트는 SQL Server 2012(11.x)SQL Server 2012 (11.x)에서 더 이상 사용되지 않으며 OPTION (FAST n ) 힌트로 대체되었습니다.For example, the FASTFIRSTROW hint was discontinued in SQL Server 2012(11.x)SQL Server 2012 (11.x) and replaced with the OPTION (FAST n ) hint. 데이터베이스 호환성 수준을 110으로 설정하면 지원되지 않는 힌트를 복원하지 않습니다.Setting the database compatibility level to 110 will not restore the discontinued hint. 지원되지 않는 기능에 대한 자세한 내용은 SQL Server 2016에서 지원되지 않는 데이터베이스 엔진 기능, SQL Server 2014에서 지원되지 않는 데이터베이스 엔진 기능, SQL Server 2012에서 지원되지 않는 데이터베이스 엔진 기능SQL Server 2008에서 지원되지 않는 데이터베이스 엔진 기능을 참조하세요.For more information on discontinued functionality, see Discontinued Database Engine Functionality in SQL Server 2016, Discontinued Database Engine Functionality in SQL Server 2014, Discontinued Database Engine Functionality in SQL Server 2012, and Discontinued Database Engine Functionality in SQL Server 2008.

중요

지정된 SQL ServerSQL Server 버전에 도입된 주요 변경 내용은 호환성 수준으로 보호되지 않을 수 있습니다.Breaking changes introduced in a given SQL ServerSQL Server version may not be protected by compatibility level. 이는 SQL Server 데이터베이스 엔진SQL Server Database Engine의 버전 간 동작 변경을 나타냅니다.This refers to behavior changes between versions of the SQL Server 데이터베이스 엔진SQL Server Database Engine. Transact-SQLTransact-SQL 동작은 일반적으로 호환성 수준으로 보호됩니다. behavior is usually protected by compatibility level. 그러나 변경되거나 제거된 시스템 개체는 호환성 수준으로 보호되지 않습니다.However, changed or removed system objects are not protected by compatibility level.

호환성 수준으로 보호되는 주요 변경 내용의 예는 datetime에서 datetime2 데이터 형식으로의 암시적 변환입니다.An example of a breaking change protected by compatibility level is an implicit conversion from datetime to datetime2 data types. 데이터베이스 호환성 수준 130에서 밀리초의 소수 부분을 고려하여 향상된 정확도를 보여 주므로 다르게 변환된 값을 생성합니다.Under database compatibility level 130, these show improved accuracy by accounting for the fractional milliseconds, resulting in different converted values. 이전 변환 동작을 복원하려면 데이터베이스 호환성 수준을 120 이하로 설정합니다.To restore previous conversion behavior, set the database compatibility level to 120 or lower.

호환성 수준으로 보호되지 않는 주요 변경 내용의 예는 다음과 같습니다.Examples of breaking changes not protected by compatibility level are:

  • 시스템 개체의 변경된 열 이름입니다.Changed column names in system objects. SQL Server 2012(11.x)SQL Server 2012 (11.x)에서 sys.dm_os_sys_info의 single_pages_kb 열 이름은 pages_kb로 변경되었습니다.In SQL Server 2012(11.x)SQL Server 2012 (11.x) the column single_pages_kb in sys.dm_os_sys_info was renamed to pages_kb. 호환성 수준에 관계 없이 쿼리 SELECT single_pages_kb FROM sys.dm_os_sys_info는 오류 207(잘못된 열 이름)을 생성합니다.Regardless of the compatibility level, the query SELECT single_pages_kb FROM sys.dm_os_sys_info will produce error 207 (Invalid column name).
  • 제거된 시스템 개체입니다.Removed system objects. SQL Server 2012(11.x)SQL Server 2012 (11.x)에서 sp_dboption이 제거되었습니다.In SQL Server 2012(11.x)SQL Server 2012 (11.x) the sp_dboption was removed. 호환성 수준에 관계 없이 EXEC sp_dboption 'AdventureWorks2016CTP3', 'autoshrink', 'FALSE'; 문은 오류 2812(저장된 프로시저 'sp_dboption'을 찾을 수 없음)를 생성합니다.Regardless of the compatibility level, the statement EXEC sp_dboption 'AdventureWorks2016CTP3', 'autoshrink', 'FALSE'; will produce error 2812 (Could not find stored procedure 'sp_dboption').

주요 변경 내용에 대한 자세한 내용은 SQL Server 2017에서 데이터베이스 엔진 기능에 대한 주요 변경 내용, SQL Server 2016에서 데이터베이스 엔진 기능에 대한 주요 변경 내용, SQL Server 2014에서 데이터베이스 엔진 기능에 대한 주요 변경 내용, SQL Server 2012에서 데이터베이스 엔진 기능에 대한 주요 변경 내용SQL Server 2008에서 데이터베이스 엔진 기능에 대한 주요 변경 내용을 참조하세요.For more information on breaking changes, see Breaking Changes to Database Engine Features in SQL Server 2017, Breaking Changes to Database Engine Features in SQL Server 2016, Breaking Changes to Database Engine Features in SQL Server 2014, Breaking Changes to Database Engine Features in SQL Server 2012, and Breaking Changes to Database Engine Features in SQL Server 2008.

데이터베이스 호환성 수준 업그레이드 모범 사례Best Practices for upgrading Database Compatibility Level

호환성 수준 업그레이드를 위해 권장되는 워크플로는 데이터베이스 호환성 모드 변경 및 쿼리 저장소 사용을 참조하세요.For the recommended workflow for upgrading the compatibility level, see Change the Database Compatibility Mode and Use the Query Store.

호환성 수준 및 저장 프로시저Compatibility Levels and Stored Procedures

저장 프로시저가 실행될 때 저장 프로시저는 정의된 데이터베이스의 현재 호환성 수준을 사용합니다.When a stored procedure executes, it uses the current compatibility level of the database in which it is defined. 데이터베이스의 호환성 설정이 변경되면 모든 저장 프로시저도 그에 맞게 자동으로 다시 컴파일됩니다.When the compatibility setting of a database is changed, all of its stored procedures are automatically recompiled accordingly.

호환성 수준 130과 수준 140 사이의 차이Differences Between Compatibility Level 130 and Level 140

이 섹션에서는 호환성 수준 140으로 도입된 새로운 동작에 대해 설명합니다.This section describes new behaviors introduced with compatibility level 140.

호환성 수준 설정 130 이하Compatibility-level setting of 130 or lower 호환성 수준 설정 140Compatibility-level setting of 140
다중 문 테이블 반환 함수를 참조하는 명령문에 대한 카디널리티 예상치는 고정된 행 추측을 사용합니다.Cardinality estimates for statements referencing multi-statement table valued functions use a fixed row guess. 다중 문 테이블 반환 함수를 참조하는 적절한 명령문에 대한 카디널리티 예상치는 함수 출력의 실제 카디널리티를 사용합니다.Cardinality estimates for eligible statements referencing multi-statement table valued functions will use the actual cardinality of the function output. 다중 문 테이블 반환 함수에 대한 인터리브 실행을 통해 활성화됩니다.This is enabled via interleaved execution for multi-statement table valued functions.
디스크에 대한 분산이 발생하는 부족한 메모리 부여 크기를 요청하는 일괄 처리 모드 쿼리는 연속 실행에 대한 문제가 지속될 수 있습니다.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may continue to have issues on consecutive executions. 디스크에 대한 분산이 발생하는 부족한 메모리 부여 크기를 요청하는 일괄 처리 모드 쿼리는 연속 실행에 대한 성능을 향상시킬 수 있습니다.Batch-mode queries that request insufficient memory grant sizes that result in spills to disk may have improved performance on consecutive executions. 일괄 처리 모드 연산자에 대해 분산이 발생한 경우 캐시 계획의 메모리 부여 크기를 업데이트하는 일괄 처리 모드 메모리 부여 피드백을 통해 활성화됩니다.This is enabled via batch mode memory grant feedback which will update the memory grant size of a cached plan if spills have occurred for batch mode operators.
동시성 문제가 발생하는 과도한 메모리 부여 크기를 요청하는 일괄 처리 모드 쿼리는 연속 실행에 대한 문제가 지속될 수 있습니다.Batch-mode queries that request an excessive memory grant size that results in concurrency issues may continue to have issues on consecutive executions. 동시성 문제가 발생하는 과도한 메모리 부여 크기를 요청하는 일괄 처리 모드 쿼리는 연속 실행에 대한 동시성을 향상시킬 수 있습니다.Batch-mode queries that request an excessive memory grant size that results in concurrency issues may have improved concurrency on consecutive executions. 과도한 양이 요청된 경우 캐시 계획의 메모리 부여 크기를 업데이트하는 일괄 처리 모드 메모리 부여 피드백을 통해 활성화됩니다.This is enabled via batch mode memory grant feedback which will update the memory grant size of a cached plan if an excessive amount was originally requested.
조인 연산자를 포함하는 일괄 처리 모드 쿼리는 중첩된 루프, 해시 조인 및 병합 조인을 포함하는 세 개의 물리적 조인 알고리즘에 적합합니다.Batch-mode queries that contain join operators are eligible for three physical join algorithms, including nested loop, hash join and merge join. 카디널리티 예측치가 조인 입력에 대해 잘못된 경우 부적절한 조인 알고리즘이 선택될 수 있습니다.If cardinality estimates are incorrect for join inputs, an inappropriate join algorithm may be selected. 이 문제가 발생하는 경우 성능이 저하되고 부적절한 조인 알고리즘이 캐시 계획이 다시 컴파일될 때까지 사용 중으로 남아 있습니다.If this occurs, performance will suffer and the inappropriate join algorithm will remain in-use until the cached plan is recompiled. 적응형 조인이라는 추가 조인 연산자가 있습니다.There is an additional join operator called adaptive join. 카디널리티 예측치가 외부 빌드 조인 입력에 대해 잘못된 경우 부적절한 조인 알고리즘이 선택될 수 있습니다.If cardinality estimates are incorrect for the outer build join input, an inappropriate join algorithm may be selected. 이 문제가 발생하고 명령문이 적응형 조인에 대해 적합한 경우 더 작은 조인 입력에 중첩된 루프가 사용되고 다시 컴파일할 필요 없이 더 큰 조인 입력에 해시 조인이 동적으로 사용됩니다.If this occurs and the statement is eligible for an adaptive join, a nested loop will be used for smaller join inputs and a hash join will be used for larger join inputs dynamically without requiring recompilation.
Columnstore 인덱스를 참조하는 간단한 계획은 일괄 처리 모드 실행에 적합하지 않습니다.Trivial plans referencing Columnstore indexes are not eligible for batch mode execution. Columnstore 인덱스를 참조하는 간단한 계획은 일괄 처리 모드 실행에 적합한 계획을 위해 무시됩니다.A trivial plan referencing Columnstore indexes will be discarded in favor of a plan that is eligible for batch mode execution.
sp_execute_external_script UDX 연산자는 행 모드에서만 실행할 수 있습니다.The sp_execute_external_script UDX operator can only run in row mode. sp_execute_external_script UDX 연산자는 일괄 처리 모드 실행에 적합합니다.The sp_execute_external_script UDX operator is eligible for batch mode execution.
다중 문 TVF(테이블 반환 함수)는 인터리브 실행이 없습니다.Multi-statement table-valued functions (TVF's) do not have interleaved execution 계획 품질을 개선하기 위한 다중 문 TVF에 대한 인터리브 실행Interleaved execution for multi-statement TVFs to improve plan quality .

SQL Server 2017 이전의 SQL Server 이전 버전에서 추적 플래그 4199의 수정 사항이 이제 기본적으로 활성화됩니다.Fixes that were under trace flag 4199 in earlier versions of SQL Server prior to SQL Server 2017 are now enabled by default. 호환성 모드 140 사용With compatibility mode 140. 추적 플래그 4199는 SQL Server 2017 이후에 릴리스되는 새로운 쿼리 최적화 프로그램 수정에 적용됩니다.Trace flag 4199 will still be applicable for new query optimizer fixes that are released after SQL Server 2017. 추적 플래그 4199에 대한 자세한 내용은 추적 플래그 4199를 참조하세요.For information about Trace Flag 4199, see Trace Flag 4199.

호환성 수준 120과 수준 130 사이의 차이Differences Between Compatibility Level 120 and Level 130

이 섹션에서는 호환성 수준 130으로 정의된 새로운 동작에 대해 설명합니다.This section describes new behaviors introduced with compatibility level 130.

호환성 수준 설정 120 이하Compatibility-level setting of 120 or lower 호환성 수준 설정 130Compatibility-level setting of 130
Insert select 문의 Insert는 단일 스레드입니다.The Insert in an Insert-select statement is single-threaded. Insert select 문에서 Insert는 다중 스레드 형식이거나, 병렬 계획일 수 있습니다.The Insert in an Insert-select statement is multi-threaded or can have a parallel plan.
메모리 최적화 테이블에 대한 쿼리는 단일 스레드를 실행합니다.Queries on a memory-optimized table execute single-threaded. 메모리 최적화 테이블에 대한 쿼리는 이제 병렬 계획을 가질 수 있습니다.Queries on a memory-optimized table can now have parallel plans.
SQL 2014 카디널리티 평가기 CardinalityEstimationModelVersion="120" 을 도입했습니다.Introduced the SQL 2014 Cardinality estimator CardinalityEstimationModelVersion="120" 카디널리티 추정 모델 130을 통한 자세한 CE(카디널리티 추정) 개선 사항은 쿼리 계획에서 볼 수 있습니다.Further cardinality estimation ( CE) Improvements with the Cardinality Estimation Model 130 which is visible from a Query plan. CardinalityEstimationModelVersion="130"CardinalityEstimationModelVersion="130"
Columnstore 인덱스가 있는 일괄 처리 모드와 행 모드 비교 변경 내용Batch mode versus Row Mode changes with Columnstore indexes

Columnstore 인덱스가 있는 테이블에 대한 정렬은 행 모드에 있습니다.Sorts on a table with Columnstore index are in Row mode

Windowing 함수 집계는 LAG 또는 LEAD와 같은 행 모드에서 작동합니다.Windowing function aggregates operate in row mode such as LAG or LEAD

여러 고유 절이 있는 Columnstore 테이블에 대한 쿼리는 행 모드에서 작동했습니다.Queries on Columnstore tables with Multiple distinct clauses operated in Row mode

MAXDOP 1에서 실행되거나 직렬 계획을 사용하는 쿼리는 행 모드에서 실행되었습니다.Queries running under MAXDOP 1 or with a serial plan executed in Row mode
Columnstore 인덱스가 있는 일괄 처리 모드와 행 모드 비교 변경 내용Batch mode versus Row Mode changes with Columnstore indexes

Columnstore 인덱스가 있는 테이블에 대한 정렬은 이제 일괄 처리 모드에 있습니다.Sorts on a table with a Columnstore index are now in batch mode

Windowing 집계는 이제 LAG 또는 LEAD와 같은 일괄 처리 모드에서 작동합니다.Windowing aggregates now operate in batch mode such as LAG or LEAD

여러 고유 절이 있는 Columnstore 테이블에 대한 쿼리는 일괄 처리 모드에서 작동합니다.Queries on Columnstore tables with Multiple distinct clauses operate in Batch mode

Maxdop1에서 실행되거나 직렬 계획을 사용하는 쿼리는 일괄 처리 모드에서 실행됩니다.Queries running under Maxdop1 or with a serial plan execute in Batch Mode
통계는 자동으로 업데이트될 수 있습니다.Statistics can be automatically updated. 자동으로 통계를 업데이트하는 논리는 대형 테이블에 더 적극적입니다.The logic which automatically updates statistics is more aggressive on large tables. 실제로 고객이 새로 삽입된 행이 빈번하게 쿼리되지만 통계가 해당 값을 포함하도록 업데이트되지 않는 쿼리에 대한 성능 문제를 발견하는 사례를 줄여야 합니다.In practice, this should reduce cases where customers have seen performance issues on queries where newly inserted rows are queried frequently but where the statistics had not been updated to include those values.
추적 2371은 SQL Server 2014(12.x)SQL Server 2014 (12.x)에서 기본적으로 OFF입니다.Trace 2371 is OFF by default in SQL Server 2014(12.x)SQL Server 2014 (12.x). 추적 2371SQL Server 2016(13.x)SQL Server 2016 (13.x)에서 기본적으로 ON입니다.Trace 2371 is ON by default in SQL Server 2016(13.x)SQL Server 2016 (13.x). 추적 플래그 2371은 자동 통계 업데이트 도구에 매우 많은 행이 있는 테이블에서 더 작지만 현명한 행의 하위 집합을 샘플링하도록 알려 줍니다.Trace flag 2371 tells the auto statistics updater to sample a smaller yet wiser subset of rows, in a table that has a great many rows.

하나의 개선 사항은 최근에 삽입된 더 많은 행을 샘플에 포함하는 것입니다.One improvement is to include in the sample more rows that were inserted recently.

또 다른 개선 사항은 업데이트 통계 프로세스가 실행되는 동안 쿼리를 차단하기 보다는 쿼리가 실행되도록 두는 것입니다.Another improvement is to let queries run while the update statistics process is running, rather than blocking the query.
수준 120의 경우 통계는 단일 스레드 프로세스를 통해 샘플링됩니다.For level 120, statistics are sampled by a single-threaded process. 수준 130의 경우 통계는 다중 스레드 프로세스를 통해 샘플링됩니다.For level 130, statistics are sampled by a multi-threaded process.
253 들어오는 외래 키는 제한입니다.253 incoming foreign keys is the limit. 최대 10,000개의 들어오는 외래 키 또는 유사한 참조로 지정된 테이블을 참조할 수 있습니다.A given table can be referenced by up to 10,000 incoming foreign keys or similar references. 제한 사항에 대해서는 Create Foreign Key Relationships를 참조하세요.For restrictions, see Create Foreign Key Relationships.
사용되지 않는 MD2, MD4, MD5, SHA 및 SHA1 해시 알고리즘이 허용됩니다.The deprecated MD2, MD4, MD5, SHA, and SHA1 hash algorithms are permitted. SHA2_256 및 SHA2_512 해시 알고리즘만 허용됩니다.Only SHA2_256 and SHA2_512 hash algorithms are permitted.
SQL Server 2016(13.x)SQL Server 2016 (13.x)는 일부 데이터 형식 변환 및 일부(주로 드문) 작업에서 향상된 기능을 포함합니다. includes improvements in some data types conversions and some (mostly uncommon) operations. 자세한 내용은 일부 데이터 형식 및 일반적이지 않은 작업 처리 시 SQL Server 2016의 향상된 기능을 참조하세요.For details see SQL Server 2016 improvements in handling some data types and uncommon operations.

SQL Server 2016(13.x)SQL Server 2016 (13.x) 이전의 SQL ServerSQL Server의 이전 버전에서 추적 플래그 4199의 수정 사항이 이제 기본적으로 활성화됩니다.Fixes that were under trace flag 4199 in earlier versions of SQL ServerSQL Server prior to SQL Server 2016(13.x)SQL Server 2016 (13.x) are now enabled by default. 호환성 모드 130 사용With compatibility mode 130. 추적 플래그 4199는 SQL Server 2016(13.x)SQL Server 2016 (13.x) 이후에 릴리스되는 새로운 쿼리 최적화 프로그램 수정에 적용됩니다.Trace flag 4199 will still be applicable for new query optimizer fixes that are released after SQL Server 2016(13.x)SQL Server 2016 (13.x). SQL 데이터베이스SQL Database에서 이전 쿼리 최적화 프로그램을 사용하려면 호환성 수준 110을 선택해야 합니다.To use the older query optimizer in SQL 데이터베이스SQL Database you must select compatibility level 110. 추적 플래그 4199에 대한 자세한 내용은 추적 플래그 4199를 참조하세요.For information about Trace Flag 4199, see Trace Flag 4199.

낮은 호환성 수준과 수준 120 사이의 차이Differences Between Lower Compatibility Levels and Level 120

이 섹션에서는 호환성 수준 120으로 정의된 새로운 동작에 대해 설명합니다.This section describes new behaviors introduced with compatibility level 120.

호환성 수준 설정 110 이하Compatibility-level setting of 110 or lower 호환성 수준 설정 120Compatibility-level setting of 120
이전 쿼리 최적화 프로그램이 사용됩니다.The older query optimizer is used. SQL Server 2014(12.x)SQL Server 2014 (12.x)는 쿼리 계획을 만들고 최적화하는 구성 요소에 대한 향상된 기능을 포함합니다. includes substantial improvements to the component that creates and optimizes query plans. 이러한 새로운 쿼리 최적화 프로그램 기능은 데이터베이스 호환성 수준 120의 사용에 따라 달라집니다.This new query optimizer feature is dependent upon use of the database compatibility level 120. 이러한 향상된 기능을 활용하려면 데이터베이스 호환성 수준 120을 사용하여 새 데이터베이스 응용 프로그램을 개발해야 합니다.New database applications should be developed using database compatibility level 120 to take advantage of these improvements. 이전 버전의 SQL ServerSQL Server에서 마이그레이션된 응용 프로그램의 경우 좋은 성능이 유지되거나 향상되었는지 확인하려면 신중하게 테스트해야 합니다.Applications that are migrated from earlier versions of SQL ServerSQL Server should be carefully tested to confirm that good performance is maintained or improved. 성능이 저하되면 데이터베이스 호환성 수준을 110 이하로 설정하여 이전 쿼리 최적화 프로그램 방법을 사용할 수 있습니다.If performance degrades, you can set the database compatibility level to 110 or earlier to use the older query optimizer methodology.

데이터베이스 호환성 수준 120은 최신 데이터 웨어하우징 및 OLTP 작업에 대해 조정된 새로운 카디널리티 평가기를 사용합니다.Database compatibility level 120 uses a new cardinality estimator that is tuned for modern data warehousing and OLTP workloads. 성능 문제 때문에 데이터베이스 호환성 수준을 110으로 설정하려면 먼저 SQL Server 2014(12.x)SQL Server 2014 (12.x) 데이터베이스 엔진의 새로운 기능 항목의 쿼리 계획 섹션에서 권장 사항을 참조하세요.Before setting database compatibility level to 110 because of performance issues, see the recommendations in the Query Plans section of the SQL Server 2014(12.x)SQL Server 2014 (12.x) What's New in Database Engine topic.
120 미만의 호환성 수준에서는 date 값을 문자열 값으로 변환할 때 언어 설정이 무시됩니다.In compatibility levels lower than 120, the language setting is ignored when converting a date value to a string value. 이 동작은 date 유형에만 한정됩니다.Note that this behavior is specific only to the date type. 아래에 있는 예제 섹션에서 예제 B를 참조하세요.See example B in the Examples section below. date 값을 문자열 값으로 변환할 때 언어 설정이 무시되지 않습니다.The language setting is not ignored when converting a date value to a string value.
EXCEPT 절의 오른쪽에 있는 재귀 참조는 무한 루프를 만듭니다.Recursive references on the right-hand side of an EXCEPT clause create an infinite loop. 아래 예제 섹션의 예제 C는 이 동작을 보여 줍니다.Example C in the Examples section below demonstrates this behavior. EXCEPT 절에 있는 재귀 참조는 ANSI SQL 표준에 따라 오류를 생성합니다.Recursive references in an EXCEPT clause generates an error in compliance with the ANSI SQL standard.
재귀 CTE(공통 테이블 식)는 중복된 열 이름을 허용합니다.Recursive common table expression (CTE) allows duplicate column names. 재귀적 CTE에서 중복 열 이름을 허용하지 않습니다.Recursive CTE do not allow duplicate column names.
해제된 트리거는 트리거가 변경되는 경우 설정됩니다.Disabled triggers are enabled if the triggers are altered. 트리거를 변경하는 경우 트리거의 상태(설정 또는 해제)가 변경되지 않습니다.Altering a trigger does not change the state (enabled or disabled) of the trigger.
OUTPUT INTO 테이블 절은 IDENTITY_INSERT SETTING = OFF를 무시하고 명시적 값이 삽입될 수 있도록 합니다.The OUTPUT INTO table clause ignores the IDENTITY_INSERT SETTING = OFF and allows explicit values to be inserted. IDENTITY_INSERT가 OFF로 설정되면 테이블의 ID 열에 명시적 값을 삽입할 수 없습니다.You cannot insert explicit values for an identity column in a table when IDENTITY_INSERT is set to OFF.
데이터베이스 포함이 부분으로 설정된 경우 MERGE 문의 OUTPUT 절에서 $action 필드의 유효성을 검사하면 데이터 정렬 오류가 반환될 수 있습니다.When the database containment is set to partial, validating the $action field in the OUTPUT clause of a MERGE statement can return a collation error. MERGE 문의 $action 절에서 반환되는 값의 데이터 정렬은 서버 데이터 정렬 대신 데이터베이스 데이터 정렬이며 데이터 정렬 충돌 오류가 반환되지 않습니다.The collation of the values returned by the $action clause of a MERGE statement is the database collation instead of the server collation and a collation conflict error is not returned.
SELECT INTO 문은 항상 단일 스레드 삽입 작업을 만듭니다.A SELECT INTO statement always creates a single-threaded insert operation. SELECT INTO 문은 병렬 삽입 작업을 만들 수 있습니다.A SELECT INTO statement can create a parallel insert operation. 많은 수의 행을 삽입하는 경우 병렬 작업은 성능을 향상시킬 수 있습니다.When inserting a large numbers of rows, the parallel operation can improve performance.

낮은 호환성 수준과 수준 110 및 120 사이의 차이Differences Between Lower Compatibility Levels and Levels 110 and 120

이 섹션에서는 호환성 수준 110으로 정의된 새로운 동작에 대해 설명합니다.This section describes new behaviors introduced with compatibility level 110. 이 섹션은 또한 수준 120에도 적용됩니다.This section also applies to level 120.

호환성 수준 설정 100 이하Compatibility-level setting of 100 or lower 호환성 수준 설정 110 이상Compatibility-level setting of at least 110
CLR(공용 언어 런타임) 데이터베이스 개체는 CLR 버전 4를 사용하여 실행됩니다.Common language runtime (CLR) database objects are executed with version 4 of the CLR. 그러나 CLR 버전 4에 도입된 일부 동작 변경은 발생하지 않습니다.However, some behavior changes introduced in version 4 of the CLR are avoided. 자세한 내용은 CLR 통합의 새로운 기능을 참조하세요.For more information, see What's New in CLR Integration. CLR 데이터베이스 개체는 CLR 버전 4를 사용하여 실행됩니다.CLR database objects are executed with version 4 of the CLR.
XQuery 함수 string-lengthsubstring에서 각 서로게이트를 두 개의 문자로 계산합니다.The XQuery functions string-length and substring count each surrogate as two characters. XQuery 함수 string-lengthsubstring에서 각 서로게이트를 한 개의 문자로 계산합니다.The XQuery functions string-length and substring count each surrogate as one character.
PIVOT이 재귀 CTE(공통 테이블 식) 쿼리에서 허용됩니다.PIVOT is allowed in a recursive common table expression (CTE) query. 그러나 그룹화당 여러 행이 있는 경우에는 쿼리에서 잘못된 결과가 반환됩니다.However, the query returns incorrect results when there are multiple rows per grouping. PIVOT이 재귀 CTE(공통 테이블 식) 쿼리에서 허용되지 않습니다.PIVOT is not allowed in a recursive common table expression (CTE) query. 오류가 반환됩니다.An error is returned.
RC4 알고리즘은 이전 버전과의 호환성을 위해서만 지원됩니다.The RC4 algorithm is only supported for backward compatibility. 데이터베이스의 호환성 수준이 90 또는 100인 경우 새 자료는 RC4 또는 RC4_128로만 암호화할 수 있습니다.New material can only be encrypted using RC4 or RC4_128 when the database is in compatibility level 90 or 100. 이 옵션은 사용하지 않는 것이 좋습니다. SQL Server 2012(11.x)SQL Server 2012 (11.x)에서 RC4 또는 RC4_128을 사용하여 암호화된 자료는 모든 호환성 수준에서 해독할 수 있습니다.(Not recommended.) In SQL Server 2012(11.x)SQL Server 2012 (11.x), material encrypted using RC4 or RC4_128 can be decrypted in any compatibility level. RC4 또는 RC4_128를 사용하여 새 자료를 암호화할 수 없습니다.New material cannot be encrypted using RC4 or RC4_128. 대신 AES 알고리즘 중 하나와 같은 새 알고리즘을 사용하십시오.Use a newer algorithm such as one of the AES algorithms instead. SQL Server 2012(11.x)SQL Server 2012 (11.x)에서 RC4 또는 RC4_128을 사용하여 암호화된 자료는 모든 호환성 수준에서 해독할 수 있습니다.In SQL Server 2012(11.x)SQL Server 2012 (11.x), material encrypted using RC4 or RC4_128 can be decrypted in any compatibility level.
timedatetime2 데이터 형식 중 하나가 계산 열 식에서 사용되는 경우를 제외하고 이러한 데이터 형식에 대한 CASTCONVERT 연산의 기본 스타일이 121입니다.The default style for CAST and CONVERT operations on time and datetime2 data types is 121 except when either type is used in a computed column expression. 계산 열의 경우 기본 스타일은 0입니다.For computed columns, the default style is 0. 이 동작은 자동 매개 변수화와 관련된 쿼리에서 이러한 연산이 만들어지고 사용될 때 또는 제약 조건 정의에 사용될 때 계산 열에 영향을 줍니다.This behavior impacts computed columns when they are created, used in queries involving auto-parameterization, or used in constraint definitions.

아래 예제 섹션의 예제 D는 스타일 0과 121의 차이점을 보여 줍니다.Example D in the Examples section below shows the difference between styles 0 and 121. 위에서 설명한 동작은 보여 주지 않습니다.It does not demonstrate the behavior described above. 날 짜 및 시간 스타일에 대한 자세한 내용은 CAST 및 CONVERT(Transact-SQL)를 참조하세요.For more information about date and time styles, see CAST and CONVERT (Transact-SQL).
호환성 수준 110에서 timedatetime2 데이터 형식의 CASTCONVERT 연산에 대한 기본 스타일은 항상 121입니다.Under compatibility level 110, the default style for CAST and CONVERT operations on time and datetime2 data types is always 121. 쿼리에 이전 동작이 적용되는 경우 110보다 낮은 호환성 수준을 사용하거나, 해당 쿼리에서 스타일 0을 명시적으로 지정해야 합니다.If your query relies on the old behavior, use a compatibility level less than 110, or explicitly specify the 0 style in the affected query.

데이터베이스를 호환성 수준 110으로 업그레이드할 경우 디스크에 저장된 사용자 데이터는 변경되지 않습니다.Upgrading the database to compatibility level 110 will not change user data that has been stored to disk. 수동으로 이 데이터를 적절하게 수정해야 합니다.You must manually correct this data as appropriate. 예를 들어 SELECT INTO를 사용하여 위에서 설명한 계산 열 식이 포함된 원본에서 테이블을 만든 경우 계산 열 정의 자체가 아니라 스타일 0을 사용하는 데이터가 저장됩니다.For example, if you used SELECT INTO to create a table from a source that contained a computed column expression described above, the data (using style 0) would be stored rather than the computed column definition itself. 스타일 121과 일치하도록 이 데이터를 수동으로 업데이트해야 합니다.You would need to manually update this data to match style 121.
분할 뷰에서 참조되는 smalldatetime 형식의 원격 테이블 열은 datetime으로 매핑됩니다.Any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as datetime. 로컬 테이블의 해당 열(SELECT 목록의 동일한 서수 위치에 있는 열)은 datetime 형식이어야 합니다.Corresponding columns in local tables (in the same ordinal position in the select list) must be of type datetime. 분할 뷰에서 참조되는 smalldatetime 형식의 원격 테이블 열은 smalldatetime으로 매핑됩니다.Any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as smalldatetime. 로컬 테이블의 해당 열(SELECT 목록의 동일한 서수 위치에 있는 열)은 smalldatetime 형식이어야 합니다.Corresponding columns in local tables (in the same ordinal position in the select list) must be of type smalldatetime.

110으로 업그레이드한 후에는 데이터 형식이 일치하지 않으므로 분산형 분할 뷰가 실패합니다.After upgrading to 110, the distributed partitioned view will fail because of the data type mismatch. 원격 테이블의 데이터 형식을 datetime으로 변경하거나 로컬 데이터베이스의 호환성 수준을 100 이하로 설정하여 이 문제를 해결할 수 있습니다.You can resolve this by changing the data type on the remote table to datetime or setting the compatibility level of the local database to 100 or lower.
SOUNDEX 함수는 다음 규칙을 구현합니다.SOUNDEX function implements the following rules:

1) SOUNDEX 코드에 동일한 숫자가 있는 두 개의 자음을 구분하는 경우 대문자 H 또는 대문자 W가 무시됩니다.1) Upper-case H or upper-case W are ignored when separating two consonants that have the same number in the SOUNDEX code.

2) SOUNDEX 코드에서 character_expression의 처음 2자에 같은 숫자가 있으면 두 문자 모두 포함됩니다.2) If the first 2 characters of character_expression have the same number in the SOUNDEX code, both characters are included. 위의 경우에 해당되지 않고 SOUNDEX 코드에서 나란히 있는 자음에 같은 값이 있으면 첫 번째 문자를 제외한 모든 문자가 제외됩니다.Else, if a set of side-by-side consonants have same number in the SOUNDEX code, all of them are excluded except the first.
SOUNDEX 함수는 다음 규칙을 구현합니다.SOUNDEX function implements the following rules:

1) 대문자 H 또는 대문자 W가 동일한 SOUNDEX 코드 숫자를 갖는 두 개의 자음을 구분하는 경우 오른쪽의 자음은 무시됩니다.1) If upper-case H or upper-case W separate two consonants that have the same number in the SOUNDEX code, the consonant to the right is ignored

2) SOUNDEX 코드에서 나란히 있는 자음에 같은 값이 있으면 첫 번째 문자를 제외한 모든 문자가 제외됩니다.2) If a set of side-by-side consonants have same number in the SOUNDEX code, all of them are excluded except the first.



추가 규칙으로 인해 SOUNDEX 함수에서 계산된 값이 이전 호환성 수준에서 계산된 값과 다를 수 있습니다.The additional rules may cause the values computed by the SOUNDEX function to be different than the values computed under earlier compatibility levels. 호환성 수준 110으로 업그레이드한 후 SOUNDEX 함수를 사용하는 인덱스, 힙 또는 CHECK 제약 조건을 다시 작성해야 할 수 있습니다.After upgrading to compatibility level 110, you may need to rebuild the indexes, heaps, or CHECK constraints that use the SOUNDEX function. 자세한 내용은 SOUNDEX(Transact-SQL)를 참조하세요.For more information, see SOUNDEX (Transact-SQL).

호환성 수준 90과 수준 100 사이의 차이Differences Between Compatibility Level 90 and Level 100

이 섹션에서는 호환성 수준 100으로 정의된 새로운 동작에 대해 설명합니다.This section describes new behaviors introduced with compatibility level 100.

호환성 수준 설정 90Compatibility-level setting of 90 호환성 수준 설정 100Compatibility-level setting of 100 영향력Possibility of impact
세션 수준 설정과 상관없이 다중 문 테이블 반환 함수를 만든 경우 이 함수에 대해 QUOTED_IDENTIFER 설정은 항상 ON으로 설정됩니다.The QUOTED_IDENTIFER setting is always set to ON for multistatement table-valued functions when they are created regardless of the session level setting. 다중 문 테이블 반환 함수를 만든 경우 QUOTED IDENTIFIER 세션 설정이 적용됩니다.The QUOTED IDENTIFIER session setting is honored when multistatement table-valued functions are created. 보통Medium
파티션 함수를 만들거나 바꾸면 언어 설정을 US_English로 가정하고 함수의 datetimesmalldatetime 리터럴을 평가합니다.When you create or alter a partition function, datetime and smalldatetime literals in the function are evaluated assuming US_English as the language setting. 현재 언어 설정은 파티션 함수에서 datetimesmalldatetime 리터럴을 평가하는 데 사용됩니다.The current language setting is used to evaluate datetime and smalldatetime literals in the partition function. 보통Medium
FOR BROWSE 절이 INSERTSELECT INTO 문에서 허용되고 무시됩니다.The FOR BROWSE clause is allowed (and ignored) in INSERT and SELECT INTO statements. FOR BROWSE 절이 INSERTSELECT INTO 문에서 허용되지 않습니다.The FOR BROWSE clause is not allowed in INSERT and SELECT INTO statements. 보통Medium
전체 텍스트 조건자는 OUTPUT 절에서 허용됩니다.Full-text predicates are allowed in the OUTPUT clause. 전체 텍스트 조건자는 OUTPUT 절에서 허용되지 않습니다.Full-text predicates are not allowed in the OUTPUT clause. 낮음Low
CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLISTDROP FULLTEXT STOPLIST는 지원되지 않습니다.CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are not supported. 시스템 중지 목록은 자동으로 새로운 전체 텍스트 인덱스와 연결됩니다.The system stoplist is automatically associated with new full-text indexes. CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLISTDROP FULLTEXT STOPLIST는 지원됩니다.CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are supported. 낮음Low
MERGE는 예약 키워드가 아닙니다.MERGE is not enforced as a reserved keyword. MERGE는 완전 예약 키워드입니다.MERGE is a fully reserved keyword. MERGE 문은 호환성 수준 100 및 90 모두에서 지원됩니다.The MERGE statement is supported under both 100 and 90 compatibility levels. 낮음Low
INSERT 문에서 <dml_table_source> 인수를 사용하면 구문 오류가 발생합니다.Using the <dml_table_source> argument of the INSERT statement raises a syntax error. 중첩된 INSERT, UPDATE, DELETE 또는 MERGE 문에서 OUTPUT 절의 결과를 캡처하고 그 결과를 대상 테이블이나 뷰에 삽입할 수 있습니다.You can capture the results of an OUTPUT clause in a nested INSERT, UPDATE, DELETE, or MERGE statement, and insert those results into a target table or view. 이 작업은 INSERT 문의 <dml_table_source> 인수를 사용하여 수행됩니다.This is done using the <dml_table_source> argument of the INSERT statement. 낮음Low
NOINDEX가 지정되지 않으면 DBCC CHECKDB 또는 DBCC CHECKTABLE은 단일 테이블이나 인덱싱된 뷰 및 해당하는 모든 비클러스터형 XML 인덱스에 대해 물리적 일관성 검사와 논리적 일관성 검사를 모두 수행합니다.Unless NOINDEX is specified, DBCC CHECKDB or DBCC CHECKTABLE performs both physical and logical consistency checks on a single table or indexed view and on all its nonclustered and XML indexes. 공간 인덱스는 지원되지 않습니다.Spatial indexes are not supported. NOINDEX가 지정되지 않으면 DBCC CHECKDB 또는 DBCC CHECKTABLE은 단일 테이블 및 해당하는 모든 비클러스터형 인덱스에 대해 물리적 일관성 검사와 논리적 일관성 검사를 모두 수행합니다.Unless NOINDEX is specified, DBCC CHECKDB or DBCC CHECKTABLE performs both physical and logical consistency checks on a single table and on all its nonclustered indexes. 그러나 XML 인덱스, 공간 인덱스 및 인덱싱된 뷰에 대해서는 기본적으로 물리적 일관성 검사만 수행됩니다.However, on XML indexes, spatial indexes, and indexed views, only physical consistency checks are performed by default.

WITH EXTENDED_LOGICAL_CHECKS를 지정하면 인덱싱된 뷰, XML 인덱스 및 공간 인덱스에 대해 논리적 검사가 수행됩니다.If WITH EXTENDED_LOGICAL_CHECKS is specified, logical checks are performed on indexed views, XML indexes, and spatial indexes, where present. 기본적으로 물리적 일관성 검사는 논리적 일관성 검사 전에 수행됩니다.By default, physical consistency checks are performed before the logical consistency checks. NOINDEX도 지정할 경우 논리적 검사만 수행됩니다.If NOINDEX is also specified, only the logical checks are performed.
낮음Low
DML(데이터 조작 언어)로 OUTPUT 절을 사용하는 경우 문 실행 중에 런타임 오류가 발생하면 전체 트랜잭션이 종료되고 롤백됩니다.When an OUTPUT clause is used with a data manipulation language (DML) statement and a run-time error occurs during statement execution, the entire transaction is terminated and rolled back. DML(데이터 조작 언어) 문으로 OUTPUT 절을 사용하는 경우 명령문 실행 중에 런타임 오류가 발생하면 SET XACT_ABORT 설정에 따라 동작이 결정됩니다.When an OUTPUT clause is used with a data manipulation language (DML) statement and a run-time error occurs during statement execution, the behavior depends on the SET XACT_ABORT setting. SET XACT_ABORT가 OFF로 설정된 경우 OUTPUT 절을 사용하는 DML 문에서 문 중단 오류가 발생하면 해당 문은 종료되지만 일괄 처리의 실행이 계속되고 트랜잭션이 롤백되지 않습니다.If SET XACT_ABORT is OFF, a statement abort error generated by the DML statement using the OUTPUT clause will terminate the statement, but the execution of the batch continues and the transaction is not rolled back. SET XACT_ABORT가 ON으로 설정된 경우 OUTPUT 절을 사용하는 DML 문에서 런타임 오류가 발생하면 항상 일괄 처리가 종료되고 트랜잭션이 롤백됩니다.If SET XACT_ABORT is ON, all run-time errors generated by the DML statement using the OUTPUT clause will terminate the batch, and the transaction is rolled back. 낮음Low
CUBE 및 ROLLUP은 예약 키워드가 아닙니다.CUBE and ROLLUP are not enforced as reserved keywords. CUBEROLLUP은 GROUP BY 절에서 예약 키워드입니다.CUBE and ROLLUP are reserved keywords within the GROUP BY clause. 낮음Low
XML anyType 형식의 요소에는 엄격한 유효성 검사가 적용됩니다.Strict validation is applied to elements of the XML anyType type. anyType 형식의 요소에는 엄격하지 않은 유효성 검사가 적용됩니다.Lax validation is applied to elements of the anyType type. 자세한 내용은 와일드카드 구성 요소 및 콘텐츠 유효성 검사를 참조하세요.For more information, see Wildcard Components and Content Validation. 낮음Low
특수 특성 xsi:nilxsi:type은 데이터 조작 언어 문으로 쿼리하거나 수정할 수 없습니다.The special attributes xsi:nil and xsi:type cannot be queried or modified by data manipulation language statements.

즉, /e/@*에서 xsi:nilxsi:type 특성을 무시하고 /e/@xsi:nil이 실패합니다.This means that /e/@xsi:nil fails while /e/@* ignores the xsi:nil and xsi:type attributes. 그러나 xsi:nil = "false"인 경우에도 SELECT xmlCol과의 일관성을 위해 /e에서 xsi:nilxsi:type 특성을 반환합니다.However, /e returns the xsi:nil and xsi:type attributes for consistency with SELECT xmlCol, even if xsi:nil = "false".
특수 특성 xsi:nilxsi:type은 일반 특성으로 저장되므로 쿼리 및 수정이 가능합니다.The special attributes xsi:nil and xsi:type are stored as regular attributes and can be queried and modified.

예를 들어 쿼리 SELECT x.query('a/b/@*')를 실행하면 xsi:nilxsi:type을 포함하는 모든 특성이 반환됩니다.For example, executing the query SELECT x.query('a/b/@*') returns all attributes including xsi:nil and xsi:type. 쿼리에서 이러한 유형을 제외하려면 @*@*[namespace-uri(.) != "insert xsi namespace uri"로 바꿉니다. (local-name(.) = "type" 또는 local-name(.) ="nil".로는 바꾸지 마십시오.To exclude these types in the query, replace @* with @*[namespace-uri(.) != "insert xsi namespace uri" and not (local-name(.) = "type" or local-name(.) ="nil".
낮음Low
XML 상수 문자열 값을 SQL ServerSQL Server datetime 형식으로 변환하는 사용자 정의 함수를 결정적 함수로 표시합니다.A user-defined function that converts an XML constant string value to a SQL ServerSQL Server datetime type is marked as deterministic. XML 상수 문자열 값을 SQL ServerSQL Server datetime 형식으로 변환하는 사용자 정의 함수를 비결정적 함수로 표시합니다.A user-defined function that converts an XML constant string value to a SQL ServerSQL Server datetime type is marked as non-deterministic. 낮음Low
XML union 및 list 형식 중 일부는 지원되지 않습니다.The XML union and list types are not fully supported. 다음 기능을 포함하여 union 및 list 형식은 모두 지원됩니다.The union and list types are fully supported including the following functionality:

목록의 합집합Union of list

합집합의 합집합Union of union

원자성 유형의 목록List of atomic types

합집합의 목록List of union
낮음Low
인라인 테이블 반환 함수 또는 뷰에 xQuery 메서드가 포함된 경우 이 메서드에 필요한 SET 옵션의 유효성을 검사하지 않습니다.The SET options required for an xQuery method are not validated when the method is contained in a view or inline table-valued function. 인라인 테이블 반환 함수 또는 뷰에 xQuery 메서드가 포함된 경우 이 메서드에 필요한 SET 옵션의 유효성을 검사합니다.The SET options required for an xQuery method are validated when the method is contained in a view or inline table-valued function. 메서드의 SET 옵션을 잘못 설정하면 오류가 발생합니다.An error is raised if the SET options of the method are set incorrectly. 낮음Low
줄 끝 문자(캐리지 리턴 및 줄 바꿈)를 포함하는 XML 특성 값은 XML 표준에 따라 정규화되지 않습니다.XML attribute values that contain end-of-line characters (carriage return and line feed) are not normalized according to the XML standard. 즉, 하나의 줄 바꿈 문자 대신 두 문자 모두 반환됩니다.That is, both characters are returned instead of a single line-feed character. 줄 끝 문자(캐리지 리턴 및 줄 바꿈)를 포함하는 XML 특성 값은 XML 표준에 따라 정규화됩니다.XML attribute values that contain end-of-line characters (carriage return and line feed) are normalized according to the XML standard. 즉, 문서 엔터티를 포함하여 구문 분석된 외부 엔터티의 모든 줄 바꿈은 2자 시퀀스 #xD #xA 및 뒤에 #xA가 오지 않는 #xD 모두를 하나의 #xA 문자로 변환하여 입력에서 정규화됩니다.That is, all line breaks in external parsed entities (including the document entity) are normalized on input by translating both the two-character sequence #xD #xA and any #xD that is not followed by #xA to a single #xA character.

특성을 사용하여 줄 끝 문자를 포함하는 문자열 값을 변환하는 응용 프로그램은 이러한 제출된 문자를 다시 수신하지 않습니다.Applications that use attributes to transport string values that contain end-of-line characters will not receive these characters back as they are submitted. 정규화 프로세스를 방지하려면 XML 숫자 문자 엔터티를 사용하여 모든 줄 끝 문자를 인코딩합니다.To avoid the normalization process, use the XML numeric character entities to encode all end-of-line characters.
낮음Low
열 속성 ROWGUIDCOLIDENTITY는 제약 조건으로 잘못 이름이 지정될 수 있습니다.The column properties ROWGUIDCOL and IDENTITY can be incorrectly named as a constraint. 예를 들어 CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) 문은 실행되긴 하지만 제약 조건 이름이 보존되지 않으며 이를 통해 사용자에게 액세스할 수 없습니다.For example the statement CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) executes, but the constraint name is not preserved and is not accessible to the user. 열 속성 ROWGUIDCOLIDENTITY는 제약 조건으로 이름을 지정할 수 없습니다.The column properties ROWGUIDCOL and IDENTITY cannot be named as a constraint. 오류 156이 반환됩니다.Error 156 is returned. 낮음Low
UPDATE T1 SET @v = column_name = <expression>과 같은 양방향 할당을 사용하여 열을 업데이트하면 문 실행 중에 WHERE 및 ON 절과 같은 다른 절에서 문의 시작 값 대신 변수의 현재 값을 사용할 수 있으므로 예상치 못한 결과가 발생할 수 있습니다.Updating columns by using a two-way assignment such as UPDATE T1 SET @v = column_name = <expression> can produce unexpected results because the live value of the variable can be used in other clauses such as the WHERE and ON clause during statement execution instead of the statement starting value. 그 결과 각 행에서 조건자의 의미가 예기치 않게 변경될 수 있습니다.This can cause the meanings of the predicates to change unpredictably on a per-row basis.

이 동작은 호환성 수준이 90으로 설정된 경우에만 발생합니다.This behavior is applicable only when the compatibility level is set to 90.
양방향 할당을 사용하여 열을 업데이트하면 문 실행 중에 열의 문 시작 값만 액세스되므로 예상대로 결과가 나타납니다.Updating columns by using a two-way assignment produces expected results because only the statement starting value of the column is accessed during statement execution. 낮음Low
아래 예제 섹션의 예제 E를 참조하세요.See example E in the Examples section below. 아래 예제 섹션의 예제 F를 참조하세요.See example F in the Examples section below. 낮음Low
ODBC 함수 {fn CONVERT()}는 언어의 기본 날짜 형식을 사용합니다.The ODBC function {fn CONVERT()} uses the default date format of the language. 일부 언어에서 기본 형식은 YDM입니다. 이 경우 CONVERT()가 YMD 형식을 사용하는 {fn CURDATE()}와 같은 다른 함수와 결합되면 변환 오류가 발생합니다.For some languages, the default format is YDM, which can result in conversion errors when CONVERT() is combined with other functions, such as {fn CURDATE()}, that expect a YMD format. ODBC 함수 {fn CONVERT()}는 ODBC 데이터 형식 SQL_TIMESTAMP, SQL_DATE, SQL_TIME, SQLDATE, SQL_TYPE_TIME 및 SQL_TYPE_TIMESTAMP로 변환할 때 스타일 121(언어와 상관없는 YMD 형식)을 사용합니다.The ODBC function {fn CONVERT()} uses style 121 (a language-independent YMD format) when converting to the ODBC data types SQL_TIMESTAMP, SQL_DATE, SQL_TIME, SQLDATE, SQL_TYPE_TIME, and SQL_TYPE_TIMESTAMP. 낮음Low
DATEPART와 같은 datetime 내장 함수에서 문자열 입력 값은 유효한 datetime 리터럴이 아니어도 됩니다.Datetime intrinsics such as DATEPART do not require string input values to be valid datetime literals. 예를 들어 SELECT DATEPART (year, '2007/05-30')는 성공적으로 컴파일됩니다.For example, SELECT DATEPART (year, '2007/05-30') compiles successfully. DATEPART와 같은 datetime 내장 함수에서 문자열 입력 값은 유효한 datetime 리터럴이어야 합니다.Datetime intrinsics such as DATEPART require string input values to be valid datetime literals. 유효하지 않은 datetime 리터럴을 사용하면 오류 241이 반환됩니다.Error 241 is returned when an invalid datetime literal is used. 낮음Low

예약 키워드Reserved Keywords

호환성 설정은 데이터베이스 엔진Database Engine에 예약되는 키워드도 결정합니다.The compatibility setting also determines the keywords that are reserved by the 데이터베이스 엔진Database Engine. 다음 표에서는 각 호환성 수준에 의해 정의된 예약 키워드를 보여 줍니다.The following table shows the reserved keywords that are introduced by each of the compatibility levels.

호환성 수준 설정Compatibility-level setting 예약 키워드Reserved keywords
130130 결정될 예정입니다.To be determined.
120120 없음None.
110110 WITHIN GROUP, TRY_CONVERT, SEMANTICKEYPHRASETABLE, SEMANTICSIMILARITYDETAILSTABLE, SEMANTICSIMILARITYTABLEWITHIN GROUP, TRY_CONVERT, SEMANTICKEYPHRASETABLE, SEMANTICSIMILARITYDETAILSTABLE, SEMANTICSIMILARITYTABLE
100100 CUBE, MERGE, ROLLUPCUBE, MERGE, ROLLUP
9090 EXTERNAL, PIVOT, UNPIVOT, REVERT, TABLESAMPLEEXTERNAL, PIVOT, UNPIVOT, REVERT, TABLESAMPLE

지정된 호환성 수준의 예약 키워드에는 해당 수준 또는 그 아래 수준에서 정의된 모든 키워드가 포함됩니다.At a given compatibility level, the reserved keywords include all of the keywords introduced at or below that level. 따라서 수준이 110인 응용 프로그램의 경우에는 위 표에 나열된 모든 키워드가 예약되어 있습니다.Thus, for instance, for applications at level 110, all of the keywords listed in the preceding table are reserved. 더 낮은 호환성 수준에서 수준이 100인 키워드는 유효한 개체 이름으로 유지되지만 해당 키워드에 대한 수준이 110인 언어 기능은 사용할 수 없습니다.At the lower compatibility levels, level-100 keywords remain valid object names, but the level-110 language features corresponding to those keywords are unavailable.

정의된 키워드는 예약된 상태로 유지됩니다.Once introduced, a keyword remains reserved. 예를 들어 호환성 수준 90에서 정의된 예약 키워드 PIVOT은 수준 100, 110 및 120에서도 예약되어 있습니다.For example, the reserved keyword PIVOT, which was introduced in compatibility level 90, is also reserved in levels 100, 110, and 120.

응용 프로그램이 호환성 수준에 대한 키워드로 예약되어 있는 식별자를 사용할 경우 제대로 실행되지 않습니다.If an application uses an identifier that is reserved as a keyword for its compatibility level, the application will fail. 이러한 문제를 해결하려면 식별자를 대괄호([])나 따옴표("")로 묶으십시오. 예를 들어 식별자EXTERNAL을 사용하는 응용 프로그램을 호환성 수준 90으로 업그레이드하려면 식별자를 [EXTERNAL] 이나 "EXTERNAL" 로 변경할 수 있습니다.To work around this, enclose the identifier between either brackets ([]) or quotation marks (""); for example, to upgrade an application that uses the identifier EXTERNAL to compatibility level 90, you could change the identifier to either [EXTERNAL] or "EXTERNAL".

자세한 내용은 예약된 키워드(Transact-SQL)를 참조하세요.For more information, see Reserved Keywords (Transact-SQL).

사용 권한Permissions

데이터베이스에 대한 ALTER 권한이 필요합니다.Requires ALTER permission on the database.

Examples

1.A. 호환성 수준 변경Changing the compatibility level

다음 예에서는 AdventureWorks2012AdventureWorks2012 데이터베이스의 호환성 수준을 110, SQL Server 2012(11.x)SQL Server 2012 (11.x)(으)로 변경합니다.The following example changes the compatibility level of the AdventureWorks2012AdventureWorks2012 database to 110, SQL Server 2012(11.x)SQL Server 2012 (11.x).

ALTER DATABASE AdventureWorks2012  
SET COMPATIBILITY_LEVEL = 110;  
GO  

다음 예에서는 현재 데이터베이스의 호환성 수준을 반환합니다.The following example returns the compatibility level of the current database.

SELECT name, compatibility_level   
FROM sys.databases   
WHERE name = db_name();  

2.B. 호환성 수준이 120 미만일 때를 제외하고 SET LANGUAGE 문을 무시합니다.Ignoring the SET LANGUAGE statement except under compatibility level 120

다음 쿼리에서는 호환성 수준이 120 미만일 때를 제외하고 SET LANGUAGE 문을 무시합니다.The following query ignores the SET LANGUAGE statement except under compatibility level 120.

SET DATEFORMAT dmy;   
DECLARE @t2 date = '12/5/2011' ;  
SET LANGUAGE dutch;   
SELECT CONVERT(varchar(11), @t2, 106);   

-- Results when the compatibility level is less than 120.   
12 May 2011   

-- Results when the compatibility level is set to 120).  
12 mei 2011  

3.C.

110 이하의 호환성 수준 설정의 경우 EXCEPT 절의 오른쪽에 있는 재귀 참조는 무한 루프를 만듭니다.For compatibility-level setting of 110 or lower, recursive references on the right-hand side of an EXCEPT clause create an infinite loop.

WITH   
cte AS (SELECT * FROM (VALUES (1),(2),(3)) v (a)),  
r   
AS (SELECT a FROM Table1  
UNION ALL  
(SELECT a FROM Table1 EXCEPT SELECT a FROM r) )   
SELECT a   
FROM r;  

4.D.

이 예에서는 스타일 0과 스타일 121의 차이점을 보여 줍니다.This example shows the difference between styles 0 and 121. 날 짜 및 시간 스타일에 대한 자세한 내용은 CAST 및 CONVERT(Transact-SQL)를 참조하세요.For more information about date and time styles, see CAST and CONVERT (Transact-SQL).

CREATE TABLE t1 (c1 time(7), c2 datetime2);   

INSERT t1 (c1,c2) VALUES (GETDATE(), GETDATE());  

SELECT CONVERT(nvarchar(16),c1,0) AS TimeStyle0  
       ,CONVERT(nvarchar(16),c1,121)AS TimeStyle121  
       ,CONVERT(nvarchar(32),c2,0) AS Datetime2Style0  
       ,CONVERT(nvarchar(32),c2,121)AS Datetime2Style121  
FROM t1;  

-- Returns values such as the following.  
TimeStyle0       TimeStyle121       
Datetime2Style0      Datetime2Style121  
---------------- ----------------   
-------------------- --------------------------  
3:15PM           15:15:35.8100000   
Jun  7 2011  3:15PM  2011-06-07 15:15:35.8130000  

5.E.

최상위 UNION 연산자가 포함된 문에 변수를 할당할 수 있지만 예상치 않은 결과가 반환됩니다.Variable assignment is allowed in a statement containing a top-level UNION operator, but returns unexpected results. 예를 들어 다음 문에서 지역 변수 @v에는 두 테이블의 합집합의 열 BusinessEntityID 값이 할당됩니다.For example, in the following statements, local variable @v is assigned the value of the column BusinessEntityID from the union of two tables. 원래 SELECT 문에서 둘 이상의 값을 반환하면 반환된 값 중 마지막 값이 변수에 할당됩니다.By definition, when the SELECT statement returns more than one value, the variable is assigned the last value that is returned. 이 경우 변수에 마지막 값이 올바르게 할당되지만 SELECT UNION 문의 결과 집합도 함께 반환됩니다.In this case, the variable is correctly assigned the last value, however, the result set of the SELECT UNION statement is also returned.

ALTER DATABASE AdventureWorks2012  
SET compatibility_level = 90;  
GO  
USE AdventureWorks2012;  
GO  
DECLARE @v int;  
SELECT @v = BusinessEntityID FROM HumanResources.Employee  
UNION ALL  
SELECT @v = BusinessEntityID FROM HumanResources.EmployeeAddress;  
SELECT @v;  

6.F.

최상위 UNION 연산자가 포함된 문에는 변수를 할당할 수 없습니다.Variable assignment is not allowed in a statement containing a top-level UNION operator. 오류 10734가 반환됩니다.Error 10734 is returned. 오류를 해결하려면 다음 예와 같이 쿼리를 다시 작성합니다.To resolve the error, rewrite the query as shown in the following example.

DECLARE @v int;  
SELECT @v = BusinessEntityID FROM   
    (SELECT BusinessEntityID FROM HumanResources.Employee  
     UNION ALL  
     SELECT BusinessEntityID FROM HumanResources.EmployeeAddress) AS Test;  
SELECT @v;  

참고 항목See Also

ALTER DATABASE(Transact-SQL) ALTER DATABASE (Transact-SQL)
예약 키워드(Transact-SQL) Reserved Keywords (Transact-SQL)
CREATE DATABASE(SQL Server Transact-SQL) CREATE DATABASE (SQL Server Transact-SQL)
DATABASEPROPERTYEX(Transact-SQL) DATABASEPROPERTYEX (Transact-SQL)
sys.databases(Transact-SQL) sys.databases (Transact-SQL)
sys.database_files(Transact-SQL)sys.database_files (Transact-SQL)
데이터베이스의 호환성 수준 보기 또는 변경View or Change the Compatibility Level of a Database