Aracılığıyla paylaş


ALTER DATABASE (Transact-SQL) uyumluluk düzeyi

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

Transact-SQL ve sorgu işleme davranışlarını SQL altyapısının belirtilen sürümüyle uyumlu olacak şekilde ayarlar. Diğer ALTER DATABASE seçenekleri için bkz. ALTER DATABASE.

Söz dizimi kuralları hakkında daha fazla bilgi için bkz.Transact-SQL söz dizimi kuralları.

Sözdizimi

ALTER DATABASE database_name
SET COMPATIBILITY_LEVEL = { 170 | 160 | 150 | 140 | 130 | 120 | 110 | 100 }

Tartışmalar

database_name

Değiştirilecek veritabanının adı.

COMPATIBILITY_LEVEL { 170 | 160 | 150 | 140 | 130 | 120 | 110 | 100 | 90 | 80 }

Veritabanının uyumlu hale getirileceği SQL Server sürümü. Aşağıdaki uyumluluk düzeyi değerleri yapılandırılabilir (tüm sürümler yukarıdaki uyumluluk düzeyinin tümünü desteklemez):

Ürün Veritabanı Altyapısı sürümü Varsayılan uyumluluk düzeyi belirlemesi Desteklenen uyumluluk düzeyi değerleri
Azure SQL Veritabanı 17 170 170, 160, 150, 140, 130, 120, 110, 100
Azure SQL Yönetilen Örneği 16 Yüz elli 160, 150, 140, 130, 120, 110, 100
SQL Server 2025 (17.x) Önizlemesi 17 170 170, 160, 150, 140, 130, 120, 110, 100
SQL Server 2022 (16.x) 16 160 160, 150, 140, 130, 120, 110, 100
SQL Server 2019 (15.x) 15 Yüz elli 150, 140, 130, 120, 110, 100
SQL Server 2017 (14.x) 14 140 140, 130, 120, 110, 100
SQL Server 2016 (13.x) 13 (on üç) 130 130, 120, 110, 100
SQL Server 2014 (12.x) 12 120 120, 110, 100
SQL Server 2012 (11.x) 11 110 110, 100, 90
SQL Server 2008 R2 (10.50.x) 10.5 100 100, 90, 80
SQL Server 2008 (10.0.x) 10 100 100, 90, 80
SQL Server 2005 (9.x) 9 90 90, 80
SQL Server 2000 (8.x) 8 80 80

Önemli

SQL Server ve Azure SQL Veritabanı için veritabanı altyapısı sürüm numaraları birbiriyle karşılaştırılamaz ve bu ayrı ürünlerin iç derleme numaralarıdır. Azure SQL Veritabanı için veritabanı altyapısı, SQL Server veritabanı altyapısıyla aynı kod tabanını temel alır. En önemlisi, Azure SQL Veritabanı'ndaki veritabanı altyapısı her zaman en yeni SQL veritabanı altyapısı bitlerine sahiptir. Azure SQL Veritabanı’nın 12. sürümü, SQL Server’ın 15. sürümünden daha yenidir.

Veritabanı uyumluluk düzeyini yükseltmeye yönelik en iyi yöntemler

Uyumluluk düzeyini yükseltmek için önerilen iş akışı için bkz. Daha yeni SQL Server'a yükseltme sırasında performans kararlılığını koruma. Ayrıca, veritabanı uyumluluk düzeyini yükseltme konusunda yardımlı bir deneyim için bkz. Sorgu Ayarlama Yardımcısı'nı kullanarak veritabanlarını yükseltme.

Açıklamalar

SQL Server'ın tüm yüklemeleri için, varsayılan uyumluluk düzeyi Veritabanı Altyapısı sürümüyle ilişkilendirilir. Veritabanı daha düşük bir uyumluluk düzeyine sahip olmadığı sürece model yeni veritabanları bu düzeye ayarlanır. SQL Server'ın herhangi bir önceki sürümünden eklenen veya geri yüklenen veritabanları için veritabanı, SQL Server örneğine en az izin veriliyorsa mevcut uyumluluk düzeyini korur. Veritabanı Altyapısı tarafından izin verilen düzeyden düşük uyumluluk düzeyine sahip bir veritabanının taşınması, veritabanını otomatik olarak izin verilen en düşük uyumluluk düzeyine ayarlar. Bu, hem sistem hem de kullanıcı veritabanları için geçerlidir.

Veritabanı eklendiğinde veya geri yüklendiğinde ve yerinde yükseltmeden sonra SQL Server 2017 (14.x) için aşağıdaki davranışlar beklenir:

  • Kullanıcı veritabanının uyumluluk düzeyi yükseltmeden önce 100 veya daha yüksekse, yükseltmeden sonra aynı kalır.
  • Yükseltmeden önce kullanıcı veritabanının uyumluluk düzeyi 90 ise, yükseltilen veritabanında uyumluluk düzeyi 100 olarak ayarlanır ve bu, SQL Server 2017'de (14.x) desteklenen en düşük uyumluluk düzeyidir.
  • , , tempdbmodelve Kaynak veritabanlarının msdbuyumluluk düzeyleri, belirli bir Veritabanı Altyapısı sürümü için varsayılan uyumluluk düzeyine ayarlanır.
  • Sistem master veritabanı yükseltmeden önce sahip olduğu uyumluluk düzeyini korur. Bu, kullanıcı veritabanı davranışını etkilemez.

Daha düşük uyumluluk düzeylerinde çalışan önceden var olan veritabanları için, uygulamanın yalnızca daha yüksek bir veritabanı uyumluluk düzeyinde kullanılabilen iyileştirmeleri kullanması gerekmediği sürece, önceki veritabanı uyumluluk düzeyini korumak için geçerli bir yaklaşımdır. Yeni geliştirme çalışmaları için veya mevcut bir uygulama SQL veritabanlarında Akıllı sorgu işleme ve bazı yeni Transact-SQL gibi yeni özelliklerin kullanılmasını gerektirdiğinde, veritabanı uyumluluk düzeyini kullanılabilir en son sürüme yükseltmeyi planlayın. Daha fazla bilgi için bkz . Uyumluluk düzeyleri ve Veritabanı Altyapısı yükseltmeleri.

Uyarı

Kullanıcı nesnesi ve bağımlılık yoksa, varsayılan uyumluluk düzeyine yükseltmek genellikle güvenlidir. Daha fazla bilgi için bkz . Öneriler - ana veritabanı.

Veritabanının uyumluluk düzeyini değiştirmek için kullanın ALTER DATABASE . Bir veritabanı için yeni uyumluluk düzeyi ayarı, bir USE <database> komut verildiğinde veya bu veritabanıyla varsayılan veritabanı bağlamı olarak yeni bir oturum açma işlemi yapıldığında geçerlilik kazanır.

Veritabanının geçerli uyumluluk düzeyini görüntülemek için compatibility_level katalog görünümünde sütunu sorgular.

SQL Server'ın önceki bir sürümünde oluşturulmuş ve SQL Server 2016 (13.x) RTM veya Service Pack 1'e yükseltilen bir dağıtım veritabanı , diğer veritabanları için desteklenmeyen 90 uyumluluk düzeyine sahiptir. Bunun çoğaltma işlevselliği üzerinde bir etkisi yoktur. SQL Server'ın sonraki hizmet paketlerine ve sürümlerine yükseltilmesi, dağıtım veritabanının uyumluluk düzeyinin veritabanıyla eşleşecek şekilde artırılmasına master neden olur.

Veritabanı uyumluluk düzeyi 110'a eşlenen SQL Server 2012'nin (11.x) kardinalite tahmin modelini kabul ederek veritabanı uyumluluk düzeyi 120 veya üzerini kullanmak için bkz. ALTER DATABASE SCOPED CONFIGURATION ve özellikle anahtar sözcüğü LEGACY_CARDINALITY_ESTIMATION = ON.

Azure SQL için açıklamalar

Azure SQL Veritabanı'nda yeni oluşturulan veritabanları ve Microsoft Fabric'teki SQL veritabanı için varsayılan uyumluluk düzeyi 170'tir.

Azure SQL Yönetilen Örneği teklifinin SQL Server 2022 güncelleştirme ilkesinde yeni oluşturulan veritabanları için varsayılan uyumluluk düzeyi 150'dir.

Azure SQL Yönetilen Örneği teklifinin Always-up-to-date güncelleştirme ilkesinde yeni oluşturulan veritabanları için varsayılan uyumluluk düzeyi 170'tir.

Microsoft, mevcut veritabanları için veritabanı uyumluluk düzeyini otomatik olarak güncelleştirmez. Müşterilerin kendi takdirine bağlı olarak yapması gereken bir işlemdir.

Microsoft, müşterilerin en son sorgu iyileştirme iyileştirmelerini kullanmak için en son uyumluluk düzeyine yükseltmeyi planlamalarını kesinlikle önerir. Azure SQL Veritabanı'ndaki iki farklı uyumluluk düzeyi arasındaki en önemli sorgularınızın performans farklarını değerlendirme hakkında ipuçları için bkz. Azure SQL Veritabanı'nda Uyumluluk Düzeyi 130 ile Geliştirilmiş Sorgu Performansı. Bu makale, uyumluluk düzeyi 130 ve SQL Server'ı ifade eder, ancak SQL Server ve Azure SQL Veritabanı'ndaki 140 veya daha yüksek düzeylere yükseltmeler için de aynı metodoloji geçerlidir.

Uyumluluk düzeyine göre değişen özelliklerin tümü Azure SQL Veritabanı'nda desteklenmez.

Geçerli uyumluluk düzeyini bulma

Geçerli uyumluluk düzeyini belirlemek için compatibility_level sütununu sorgula.

SELECT [name],
       compatibility_level
FROM sys.databases;

Bağlı olduğunuz Veritabanı Altyapısı sürümünü belirlemek için aşağıdaki sorguyu yürütebilirsiniz.

SELECT SERVERPROPERTY('ProductVersion');

Uyumluluk düzeyleri ve veritabanı altyapısı yükseltmeleri

Veritabanı uyumluluk düzeyi, SQL Server Veritabanı Altyapısı'nın yükseltilmesine izin verirken aynı yükseltme öncesi veritabanı uyumluluk düzeyini koruyarak uygulamaları bağlamak için aynı işlevsel durumu koruyarak veritabanı modernleştirmesine yardımcı olan değerli bir araçtır. Başka bir deyişle, SQL Server'ın eski bir sürümünden (SQL Server 2008 (10.0.x)) SQL Server'a veya Azure SQL Veritabanı'na (Azure SQL Yönetilen Örneği dahil) uygulama değişikliği olmadan (veritabanı bağlantısı hariç) yükseltebilirsiniz. Daha fazla bilgi için bkz. uyumluluk sertifikası.

Uygulamanın yalnızca daha yüksek bir veritabanı uyumluluk düzeyinde kullanılabilen geliştirmeleri kullanması gerekmediği sürece, SQL Server Veritabanı Altyapısı'nı yükseltmek ve önceki veritabanı uyumluluk düzeyini korumak geçerli bir yaklaşımdır. Geriye dönük uyumluluk için uyumluluk düzeyini kullanma hakkında daha fazla bilgi için bkz. Uyumluluk sertifikası.

Uyumluluk düzeyleri ve saklı yordamlar

Saklı yordam yürütürken, tanımlandığı veritabanının geçerli uyumluluk düzeyini kullanır. Bir veritabanının uyumluluk ayarı değiştirildiğinde, tüm saklı yordamları buna göre otomatik olarak yeniden derlenir.

Geriye dönük uyumluluk için uyumluluk düzeyini kullanma

Veritabanı uyumluluk düzeyi ayarı, tüm sunucu için değil, yalnızca belirtilen veritabanı için Transact-SQL ve sorgu iyileştirme davranışlarıyla ilgili olan sql server'ın önceki sürümleriyle geriye dönük uyumluluk sağlar.

Uyumluluk modu 130'dan başlayarak, düzeltmeleri ve özellikleri etkileyen tüm yeni sorgu planları kasıtlı olarak yalnızca yeni uyumluluk düzeyine eklenmiştir. Bu, yeni sorgu iyileştirme davranışlarıyla ortaya çıkabilecek sorgu planı değişiklikleri nedeniyle performans düşüşü nedeniyle ortaya çıkan yükseltmeler sırasında riski en aza indirmek için yapılmıştır.

Uygulama açısından bakıldığında, ilgili uyumluluk düzeyi ayarı tarafından denetlenen davranışlarda sürüm farklılıklarına geçici bir çözüm bulmak için daha güvenli bir geçiş yolu olarak daha düşük uyumluluk düzeyini kullanın. Hedef yine de SQL veritabanlarında Akıllı sorgu işleme gibi bazı yeni özellikleri devralmak için belirli bir noktada en son uyumluluk düzeyine yükseltmek, ancak bunu denetimli bir şekilde yapmak olmalıdır.

Veritabanı uyumluluk düzeyini yükseltmek için önerilen iş akışı da dahil olmak üzere daha fazla bilgi için bkz. Veritabanı uyumluluk düzeyini yükseltmek için en iyi yöntemler.

  • Belirli bir SQL Server sürümünde kullanıma sunulan sonlandırılan işlevler uyumluluk düzeyiyle korunmaz. Bu, SQL Server Veritabanı Altyapısı'ndan kaldırılan işlevselliği ifade eder. Örneğin, FASTFIRSTROW ipucu SQL Server 2012'de (11.x) sonlandırıldı ve ipucuyla OPTION (FAST n ) değiştirildi. Veritabanı uyumluluk düzeyini 110 olarak ayarlamak, sonlandırılan ipucunu geri yüklemez. Sonlandırılan işlevler hakkında daha fazla bilgi için bkz . SQL Server'da Sonlandırılan Veritabanı Altyapısı işlevselliği.

  • Belirli bir SQL Server sürümünde yapılan hataya neden olan değişiklikler uyumluluk düzeyi tarafından korunmayabilir. Bu, SQL Server Veritabanı Altyapısı sürümleri arasındaki davranış değişikliklerini ifade eder. Transact-SQL davranışı genellikle uyumluluk düzeyiyle korunur. Ancak, değiştirilen veya kaldırılan sistem nesneleri uyumluluk düzeyi tarafından korunmaz .

    Uyumluluk düzeyiyle korunan hataya neden olan bir değişiklik örneği, datetime'dan datetime2 veri türlerine örtük bir dönüştürmedir. Veritabanı uyumluluk düzeyi 130'un altında, bunlar kesirli milisaniyeleri hesaplayarak geliştirilmiş doğruluk gösterir ve dolayısıyla farklı dönüştürülmüş değerler elde edilir. Önceki dönüştürme davranışını geri yüklemek için veritabanı uyumluluk düzeyini 120 veya daha düşük bir değere ayarlayın.

    Uyumluluk düzeyi tarafından korunmayan hataya neden olan değişikliklere örnek olarak şunlar verilebilir:

Uyumluluk düzeyleri arasındaki farklar

SQL Server'ın tüm yüklemeleri için varsayılan uyumluluk düzeyi, bu tabloda görüldüğü gibi Veritabanı Altyapısı sürümüyle ilişkilendirilir. Yeni geliştirme çalışmaları için her zaman uygulamaları en son veritabanı uyumluluk düzeyinde onaylamayı planlayın.

Yeni Transact-SQL söz dizimi, kullanıcı Transact-SQL koduyla çakışma oluşturarak var olan uygulamaları bozabilecekleri durumlar dışında veritabanı uyumluluk düzeyine göre geçitli değildir. Bu özel durumlar, bu makalenin belirli uyumluluk düzeyleri arasındaki farkları özetleyen sonraki bölümlerinde belgelenmiştir.

Veritabanı uyumluluk düzeyi, SQL Server'ın önceki sürümlerinden eklenen veya geri yüklenen veritabanları mevcut uyumluluk düzeylerini (izin verilen en düşük uyumluluk düzeyiyle aynı veya daha yüksekse) koruduğundan, SQL Server'ın önceki sürümleriyle geriye dönük uyumluluk da sağlar. Bu konu, bu makalenin Geriye dönük uyumluluk için uyumluluk düzeyini kullanma bölümünde açıklanmıştır.

Veritabanı uyumluluk düzeyi 130'dan başlayarak, sorgu planlarını etkileyen tüm yeni düzeltmeler ve özellikler yalnızca varsayılan uyumluluk düzeyi olarak da adlandırılan kullanılabilir en son uyumluluk düzeyine eklenmiştir. Bu, yeni sorgu iyileştirme davranışlarıyla ortaya çıkabilecek sorgu planı değişiklikleri nedeniyle performans düşüşü nedeniyle ortaya çıkan yükseltmeler sırasında riski en aza indirmek için yapılmıştır.

Veritabanı Altyapısı'nın yalnızca yeni bir sürümünün varsayılan uyumluluk düzeyine eklenen temel plan etkileyen değişiklikler şunlardır:

  1. İzleme bayrağı 4199 altında önceki SQL Server sürümleri için yayımlanan Sorgu İyileştiricisi düzeltmeleri, daha yeni bir SQL Server sürümünün varsayılan uyumluluk düzeyinde otomatik olarak etkinleştirilir.

    Şunlar için geçerlidir: SQL Server (SQL Server 2016 (13.x) sürümünden başlayarak), Azure SQL Veritabanı.

    Örneğin, SQL Server 2016 (13.x) yayımlandığında, önceki SQL Server sürümleri (ve ilgili uyumluluk düzeyleri 100 ile 120 arasında) için yayımlanan tüm Sorgu İyileştirici düzeltmeleri, SQL Server 2016 (13.x) varsayılan uyumluluk düzeyini (130) kullanan veritabanları için otomatik olarak etkinleştirilir. Yalnızca RTM sonrası Sorgu İyileştiricisi düzeltmelerinin açıkça etkinleştirilmesi gerekir.

    Sorgu İyileştiricisi düzeltmelerini etkinleştirmek için aşağıdaki yöntemleri kullanabilirsiniz:

    • Sunucu düzeyinde , izleme bayrağı 4199 ile.
    • VERITABANı düzeyinde QUERY_OPTIMIZER_HOTFIXES seçeneğiyle birlikte.
    • Sorgu düzeyinde, sorguyu USE HINT 'ENABLE_QUERY_OPTIMIZER_HOTFIXES' değiştirerek sorgu ipucuyla.
    • Sorgu düzeyinde, kodsuz değişikliklerle Sorgu USE HINT 'ENABLE_QUERY_OPTIMIZER_HOTFIXES'Deposu ipuçları özelliğini kullanarak.

    Daha sonra, SQL Server 2017 (14.x) yayımlandığında, SQL Server 2016 (13.x) RTM'nin ardından yayımlanan tüm Sorgu İyileştirici düzeltmeleri, SQL Server 2017 (14.x) varsayılan uyumluluk düzeyi (140) kullanılarak veritabanları için otomatik olarak etkinleştirildi. Bu, önceki tüm sürüm düzeltmelerini de içeren bir kümülatif davranıştır. Yine yalnızca RTM sonrası Sorgu İyileştiricisi düzeltmelerinin açıkça etkinleştirilmesi gerekir.

    Aşağıdaki tabloda bu davranış özetlemektedir:

    Veritabanı Altyapısı (DE) sürümü Veritabanı Uyumluluk Düzeyi TF 4199 Önceki tüm Veritabanı Uyumluluk Düzeylerinden QO değişiklikleri RTM sonrası (DE) sürümü için QO değişiklikleri
    13 (SQL Server 2016 (13.x)) 100 - 120


    130
    Kapalı
    Hakkında
    Kapalı
    Hakkında
    Sakat
    Etkinleştirildi
    Etkin
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi
    14 (SQL Server 2017 (14.x)) 100 - 120


    130
    140
    Kapalı
    Hakkında
    Kapalı
    Hakkında
    Kapalı
    Hakkında
    Sakat
    Etkinleştirildi
    Etkin
    Etkinleştirildi
    Etkin
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi
    15 (SQL Server 2019 (15.x)) ve (Azure SQL Veritabanı) 100 - 120


    130 - 140
    Yüz elli
    Kapalı
    Hakkında
    Kapalı
    Hakkında
    Kapalı
    Hakkında
    Sakat
    Etkinleştirildi
    Etkin
    Etkinleştirildi
    Etkin
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi
    16 (SQL Server 2022 (16.x)) ve (Azure SQL Veritabanı) 100 - 120


    130 - 150
    160
    Kapalı
    Hakkında
    Kapalı
    Hakkında
    Kapalı
    Hakkında
    Sakat
    Etkinleştirildi
    Etkin
    Etkinleştirildi
    Etkin
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi
    17 (SQL Server 2025 (17.x) Önizleme, Azure SQL Veritabanı ve Microsoft Fabric'te SQL veritabanı) 100 - 120


    130 - 160
    170
    Kapalı
    Hakkında
    Kapalı
    Hakkında
    Kapalı
    Hakkında
    Sakat
    Etkinleştirildi
    Etkin
    Etkinleştirildi
    Etkin
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi
    Devre dışı
    Etkinleştirildi

    Yanlış sonuçları veya erişim ihlali hatalarını gideren Sorgu İyileştiricisi düzeltmeleri izleme bayrağı 4199 tarafından korunmaz. Bu düzeltmeler isteğe bağlı olarak kabul edilmez.

  2. Microsoft Fabric'te SQL Server, Azure SQL Veritabanı ve SQL veritabanında yayımlanan kardinalite tahmin aracında yapılan değişiklikler yalnızca yeni Veritabanı Altyapısı sürümünün varsayılan uyumluluk düzeyinde etkinleştirilir, ancak önceki uyumluluk düzeylerinde etkinleştirilmez.

    Örneğin, SQL Server 2016 (13.x) yayımlandığında kardinalite tahmin işleminde yapılan değişiklikler yalnızca SQL Server 2016 (13.x) varsayılan uyumluluk düzeyi (130) kullanan veritabanlarında kullanılabilir. Önceki uyumluluk düzeyleri, SQL Server 2016(13.x) öncesinde kullanılabilen kardinalite tahmin davranışını korumıyordu.

    Daha sonra, SQL Server 2017 (14.x) yayımlandığında, kardinalite tahmin işleminde yapılan daha yeni değişiklikler yalnızca SQL Server 2017 (14.x) varsayılan uyumluluk düzeyi (140) kullanan veritabanlarında kullanılabilirdi. Veritabanı uyumluluk düzeyi 130, SQL Server 2016 (13.x) kardinalite tahmin davranışını korudu.

    Aşağıdaki tabloda bu davranış özetlemektedir:

    Veritabanı Altyapısı sürümü Veritabanı Uyumluluk Düzeyi Yeni sürüm CE değişiklikleri
    13 (SQL Server 2016 (13.x)) < 130
    130
    Devre dışı
    Etkinleştirildi
    14 (SQL Server 2017 (14.x))1 < 140
    140
    Devre dışı
    Etkinleştirildi
    15 (SQL Server 2019 (15.x))1 < 150
    Yüz elli
    Devre dışı
    Etkinleştirildi
    16 (SQL Server 2022 (16.x))1 < 160
    160
    Devre dışı
    Etkinleştirildi
    17 (SQL Server 2025 (17.x) Önizleme)1 < 170
    170
    Devre dışı
    Etkinleştirildi

    1 Microsoft Fabric'teki Azure SQL Veritabanı ve SQL veritabanı için de geçerlidir.

Belirli uyumluluk düzeyleri arasındaki diğer farklar bu makalenin sonraki bölümlerinde bulunabilir.

Uyumluluk düzeyi 160 ile düzey 170 arasındaki farklar

Bu bölümde, uyumluluk düzeyi 170 ile sunulan yeni davranışlar açıklanmaktadır.

Uyumluluk düzeyi ayarı 160 veya daha düşük Uyumluluk düzeyi ayarı 170
Simetrik anahtarın, veritabanı ana anahtarının ve hizmet ana anahtarının anahtar malzemesini korumak için SQL Server ve Azure SQL anahtar malzemesini şifrelenmiş biçimde depolar. Şifreleme, PKCS#1 v1.5 doldurma modunu kullanır. Simetrik anahtarın, veritabanı ana anahtarının ve hizmet ana anahtarının anahtar malzemesini korumak için SQL Server ve Azure SQL anahtar malzemesini şifrelenmiş biçimde depolar. Şifreleme OAEP-256 doldurma modunu kullanır. dm_database_encryption_keys yerine encryptor_type görüntülenir CERTIFICATE_OAEP_256CERTIFICATE.
Normal ifadeler, SQL Server ve Azure SQL veritabanındaki karmaşık desenleri eşleştirmek ve verileri işlemek için kullanılabilir. T-SQL içinde normal ifade desteği eklendi. Bazı normal ifade işlevleri tüm veritabanı uyumluluk düzeylerinde kullanılamaz. Daha fazla bilgi için bkz. Normal ifade işlevleri. REGEXP_LIKE, REGEXP_MATCHES ve REGEXP_SPLIT_TO_TABLE gibi normal ifade işlevleri, desen eşleştirmeyi, ayıklamayı ve doğrudan T-SQL'de bölmeyi etkinleştirmek için kullanıma sunulmuştur.
Metin ifadelerinden yapay zeka eklemeleri (vektör dizileri) oluşturma özelliği Veritabanı altyapısına eklenmiştir. Daha fazla bilgi için bkz. Yapay zeka işlevleri. Yapay zeka modeli tüketimi için metin girişinin öbeklenmesine olanak tanıyan ve yapay zeka hizmetleriyle tümleştirmeyi geliştiren AI_GENERATE_CHUNKS işlevi tanıtılmaktadır.
Geleneksel olarak, Veritabanı Altyapısı sorgu planına bir Spool işleci ekleyerek veya planda zaten mevcut olan sıralama veya karma eşleşme gibi başka bir engelleme işlecinden yararlanarak DML deyimlerini Cadılar Bayramı sorunundan korur. İyileştirilmiş Cadılar Bayramı koruması gereksiz biriktirici operatörlerini kaldırır ve Cadılar Bayramı korumasının gerekli olduğu DML işlemleri sırasında sorgu performansını artırır.
Parametreli sorgular, parametrenin farklı seçicilik kategorileri için birden çok önbelleğe alınmış sorgu planına sahip olabilir. Parametreye duyarlı plan iyileştirmesi, yalnızca seçilen sorgular için uyumluluk düzeyi 160'ta varsayılan olarak etkindir Parametreye duyarlı plan iyileştirmesi uyumluluk düzeyi 170'in altında çalıştığında DML sorgu desteği ve desteği tempdb de sağlanır
İsteğe bağlı parametreleri olan parametreleştirilmiş sorgular, parametre algılama nedeniyle yetersiz planlardan etkilenebilir. İsteğe bağlı parametreler için sorgu planı iyileştirmesi, NULL ve NULL olmayan değerler için daha uygun planlar oluşturarak performansı artırır.

Uyumluluk düzeyi 150 ile düzey 160 arasındaki farklar

Bu bölümde, uyumluluk düzeyi 160 ile sunulan yeni davranışlar açıklanmaktadır.

Uyumluluk düzeyi ayarı 150 veya daha düşük Uyumluluk düzeyi ayarı 160
Parametreli sorgular, ilk yürütme için kullanılan parametrelere göre tek bir sorgu planına sahiptir. Yalnızca bir sorgu planı önbelleğe alınır ve tüm parametre değerleri için kullanılır. Bu, parametreye duyarlı plan olarak da bilinen parametrenin bazı değerleri için sorgu planının verimsiz olmasına neden olabilir. Parametreli sorgular, parametrenin farklı seçicilik kategorileri için birden çok önbelleğe alınmış sorgu planına sahip olabilir. Parametreye duyarlı plan iyileştirmesi, uyumluluk düzeyi 160'ta varsayılan olarak etkindir. Daha fazla bilgi için bkz. PSP İyileştirme.
Kardinalite tahmini, tüm veritabanları ve sorgular için temel alınan veri dağıtımı ve kullanım desenleri hakkında yalnızca bir varsayılan model varsayımı kümesi kullanır. Bu varsayımlardan herhangi birini değiştirmenin veya ayarlamanın tek yolu, kullanıcının sorgu ipuçlarını kullanarak hangi model varsayımlarının kullanılması gerektiğini açıkça belirtmek için el ile bir işlem gerçekleştirmesidir. Sorgu planı oluşturulduktan sonra bu varsayılan modelde iç ayarlama yapılamaz. Kardinalite tahmini, temel alınan veri dağıtımı ve kullanım desenleri hakkındaki varsayılan model varsayımları kümesiyle başlar, ancak belirli bir sorgu için bazı yürütmelerden sonra Veritabanı Altyapısı hangi farklı model varsayımlarının daha doğru tahminler getirebileceğini öğrenir ve bu nedenle sorgulanan veri kümesiyle daha iyi eşleşmesi için kullanımdaki varsayımları ayarlar. CE Geri Bildirimi, uyumluluk düzeyi 160'ta varsayılan olarak etkindir. Daha fazla bilgi için bkz. Kardinalite tahmini (CE) geri bildirimi.
Veritabanı Altyapısı tarafından en uygun paralellik derecesinin otomatik olarak belirlenmesi denenmemiştir. Örnek, veritabanı, sorgu veya iş yükü düzeylerinde en yüksek paralellik derecesini (MAXDOP) el ile denetleme hakkında bilgi için bkz . Sunucu yapılandırması: maksimum paralellik derecesi Paralellik derecesi (DOP) Geri bildirimi, geçen süreye ve beklemelere göre yinelenen sorgular için paralellik verimsizliklerini belirleyerek sorgu performansını geliştirir. Paralellik kullanımının verimsiz olduğu kabul edilirse, DOP Geri Bildirimi, yapılandırılan DOP'dan sorgunun bir sonraki yürütülmesi için DOP'yi düşürür ve yardımcı olup olmadığını doğrular. DOP Geri Bildirimi varsayılan olarak etkin değildir. DOP Geri Bildirimi'ni etkinleştirmek için veritabanında kapsamlı yapılandırmayı DOP_FEEDBACK etkinleştirin. Daha fazla bilgi için bkz. Paralellik derecesi (DOP) geri bildirimi.

Uyumluluk düzeyi 140 ile düzey 150 arasındaki farklar

Bu bölümde, uyumluluk düzeyi 150 ile sunulan yeni davranışlar açıklanmaktadır.

Uyumluluk düzeyi ayarı 140 veya daha düşük Uyumluluk düzeyi ayarı 150
İlişkisel veri ambarı ve analiz iş yükleri OLTP yükü, satıcı desteği olmaması veya diğer sınırlamalar nedeniyle columnstore dizinlerini kullanamayabilir. Columnstore dizinleri olmadan bu iş yükleri toplu yürütme modundan yararlanamaz. Toplu yürütme modu artık columnstore dizinlerine gerek kalmadan analiz iş yükleri için kullanılabilir. Daha fazla bilgi için bkz . rowstore'da toplu iş modu.
Diske taşmalara neden olan yetersiz bellek verme boyutları isteyen satır modu sorgularında ardışık yürütmelerle ilgili sorunlar devam edebilir. Diske taşmalara neden olan yetersiz bellek verme boyutları isteyen satır modu sorguları, ardışık yürütmelerde performansı geliştirmiş olabilir. Daha fazla bilgi için bkz. satır modu bellek verme geri bildirimi.
Eşzamanlılık sorunlarına neden olan aşırı bellek verme boyutu isteyen satır modu sorguları ardışık yürütmelerde sorunlarla karşılaşabilir. Eşzamanlılık sorunlarına neden olan aşırı bellek verme boyutu isteyen satır modu sorgularında ardışık yürütmelerde eşzamanlılık iyileştirilmiş olabilir. Daha fazla bilgi için bkz. satır modu bellek verme geri bildirimi.
T-SQL skaler UDF'lere başvuran sorgular yinelemeli çağırma kullanır, maliyet düşük ve seri yürütmeyi zorlar. T-SQL skaler UDF'ler, çağrı sorgusuna "inlined" eşdeğer ilişkisel ifadelere dönüştürülür ve bu da genellikle önemli performans kazanımlarına neden olur. Daha fazla bilgi için bkz . T-SQL skaler UDF inlining.
Tablo değişkenleri, kardinalite tahmini için sabit bir tahmin kullanır. Gerçek satır sayısı tahmin edilen değerden çok daha yüksekse aşağı akış işlemlerinin performansı zarar görebilir. Yeni planlar, sabit bir tahmin yerine ilk derlemede karşılaşılan tablo değişkeninin gerçek kardinalitesini kullanır. Daha fazla bilgi için bkz . Tablo değişkeni ertelenen derleme.

Veritabanı uyumluluk düzeyi 150'de etkinleştirilen sorgu işleme özellikleri hakkında daha fazla bilgi için bkz. SQL Server 2019'daki yenilikler ve SQL veritabanlarında Akıllı sorgu işleme.

Uyumluluk düzeyi 130 ile düzey 140 arasındaki farklar

Bu bölümde, uyumluluk düzeyi 140 ile sunulan yeni davranışlar açıklanmaktadır.

Uyumluluk düzeyi ayarı 130 veya daha düşük Uyumluluk düzeyi ayarı 140
Çok deyimli tablo değerli işlevlere başvuran deyimler için kardinalite tahminleri sabit satır tahmini kullanır. Çok deyimli tablo değerli işlevlere başvuran uygun deyimler için kardinalite tahminleri, işlev çıkışının gerçek kardinalitesini kullanır. Bu, çok deyimli tablo değerli işlevler için araya kaydedilen yürütme yoluyla etkinleştirilir.
Diske taşmalara neden olan yetersiz bellek verme boyutları isteyen toplu iş modu sorgularında ardışık yürütmelerle ilgili sorunlar devam edebilir. Diske taşmalara neden olan yetersiz bellek verme boyutları isteyen toplu iş modu sorguları, ardışık yürütmelerde performansı geliştirmiş olabilir. Bu, toplu iş modu işleçleri için taşmalar oluştuğunda önbelleğe alınmış bir planın bellek verme boyutunu güncelleştiren toplu iş modu bellek verme geri bildirimi aracılığıyla etkinleştirilir.
Eşzamanlılık sorunlarına neden olan aşırı bellek verme boyutu isteyen toplu iş modu sorguları ardışık yürütmelerde sorunlarla karşılaşabilir. Eşzamanlılık sorunlarına neden olan aşırı bellek verme boyutu isteyen toplu iş modu sorgularında ardışık yürütmelerde eşzamanlılık iyileştirilmiş olabilir. Bu, başlangıçta çok fazla miktarda istendiyse önbelleğe alınmış bir planın bellek verme boyutunu güncelleştiren toplu iş modu bellek verme geri bildirimi aracılığıyla etkinleştirilir.
Birleştirme işleçleri içeren toplu iş modu sorguları iç içe döngü, karma birleştirme ve birleştirme birleştirme dahil olmak üzere üç fiziksel birleştirme algoritması için uygundur. Birleştirme girişleri için kardinalite tahminleri yanlışsa, uygun olmayan bir birleştirme algoritması seçilebilir. Bu durumda performans düşer ve önbelleğe alınan plan yeniden derlenene kadar uygun olmayan birleştirme algoritması kullanımda kalır. Uyarlamalı birleştirme adlı ek bir join işleci vardır. Dış derleme birleştirme girişi için kardinalite tahminleri yanlışsa, uygun olmayan bir birleştirme algoritması seçilebilir. Bu durum oluşursa ve deyimi uyarlamalı birleştirme için uygunsa, daha küçük birleştirme girişleri için iç içe geçmiş bir döngü ve yeniden derleme gerektirmeden daha büyük birleştirme girişleri için dinamik olarak karma birleştirme kullanılır.
Columnstore dizinlerine başvuran önemsiz planlar toplu iş modu yürütme için uygun değildir. Columnstore dizinlerine başvuran önemsiz bir plan, toplu iş modu yürütme için uygun bir plan lehine atılır.
sp_execute_external_script UDX işleci yalnızca satır modunda çalışabilir. sp_execute_external_script UDX işleci toplu iş modu yürütme için uygundur.
Çok deyimli tablo değerli işlevlerin (TVF'ler) araya eklemeli yürütmesi yoktur Plan kalitesini artırmak için çok deyimli TVF'ler için araya eklemeli yürütme.

SQL Server'ın SQL Server 2017 öncesi önceki sürümlerinde izleme bayrağı 4199 altında olan düzeltmeler artık varsayılan olarak etkindir. Uyumluluk modu 140 ile. İzleme bayrağı 4199, SQL Server 2017'nin ardından yayımlanan yeni sorgu iyileştirici düzeltmeleri için geçerli olmaya devam edecektir. İzleme Bayrağı 4199 hakkında bilgi için bkz. İzleme Bayrağı 4199.

Uyumluluk düzeyi 120 ile düzey 130 arasındaki farklar

Bu bölümde, uyumluluk düzeyi 130 ile sunulan yeni davranışlar açıklanmaktadır.

Uyumluluk düzeyi ayarı 120 veya daha düşük Uyumluluk düzeyi ayarı 130
INSERT-SELECT deyimindeki INSERT tek iş parçacıklı. INSERT-SELECT deyimindeki INSERT çok iş parçacıklı veya paralel bir plana sahip olabilir.
Bellek için iyileştirilmiş bir tablodaki sorgular tek iş parçacıklı olarak yürütülür. Bellek için iyileştirilmiş bir tablodaki sorgular artık paralel planlara sahip olabilir.
SQL 2014 Kardinalite tahmin aracı tanıtıldı CardinalityEstimationModelVersion="120" Sorgu planından görülebilen Kardinalite Tahmin Modeli 130 ile daha fazla kardinalite tahmini (CE) geliştirmeleri. CardinalityEstimationModelVersion="130"
Columnstore dizinleri ile Toplu iş modu ile Satır Modu değişiklikleri karşılaştırması:
  • Columnstore dizini olan bir tablodaki sıralamalar Satır modunda
  • Pencere işlevi toplamaları veya gibi LAG satır modunda çalışır LEAD
  • Satır modunda çalıştırılan Birden çok ayrı yan tümcesi olan Columnstore tablolarındaki sorgular
  • MAXDOP 1 altında veya Satır modunda yürütülen seri planlı sorgular
Columnstore dizinleri ile Toplu iş modu ile Satır Modu değişiklikleri karşılaştırması:
  • Columnstore dizini olan bir tablodaki sıralamalar artık toplu iş modunda
  • Pencereleme toplamları artık veya gibi LAG toplu iş modunda çalışır LEAD
  • Birden çok ayrı yan tümcesi olan Columnstore tablolarındaki sorgular Batch modunda çalışır
  • MAXDOP 1 altında veya seri plan ile çalışan sorgular Batch Modunda yürütülür
İstatistikler otomatik olarak güncelleştirilebilir. İstatistikleri otomatik olarak güncelleştiren mantık, büyük tablolarda daha agresiftir. Uygulamada bu, müşterilerin yeni eklenen satırların sık sorgulandığı ancak istatistiklerin bu değerleri içerecek şekilde güncelleştirilmediği sorgularda performans sorunlarıyla karşılaştığı durumları azaltmalıdır.
İzleme 2371, SQL Server 2014'te (12.x) varsayılan olarak KAPALI'dır. İzleme 2371 , SQL Server 2016'da (13.x) varsayılan olarak ON'dır. İzleme bayrağı 2371, otomatik istatistik güncelleştiricisine çok sayıda satırı olan bir tabloda satırların daha küçük ama daha akıllı bir alt kümesini örneklemesini söyler.

Bir geliştirme, örneğe yakın zamanda eklenen daha fazla satır eklemektir.

Bir diğer geliştirme de sorguyu engellemek yerine güncelleştirme istatistikleri işlemi çalışırken sorguların çalışmasına izin vermektir.
Düzey 120 için istatistikler tek iş parçacıklı bir işlem tarafından örneklenir. Düzey 130 için istatistikler çok iş parçacıklı bir işlem (paralel işlem) tarafından örneklenir.
Sınır 253 gelen yabancı anahtardır. Belirli bir tabloya en fazla 10.000 gelen yabancı anahtar veya benzer başvurular tarafından başvurulabilir. Kısıtlamalar için bkz. Yabancı anahtar ilişkileri oluşturma.
Kullanım dışı bırakılan MD2, MD4, MD5, SHA ve SHA1 karma algoritmalarına izin verilir. Yalnızca SHA2_256 ve SHA2_512 karma algoritmalarına izin verilir.
SQL Server 2016 (13.x), bazı veri türleri dönüştürmelerinde ve bazı (çoğunlukla yaygın olmayan) işlemlerde iyileştirmeler içerir. Ayrıntılar için bkz. Bazı veri türlerini ve yaygın olmayan işlemleri işlemeye yönelik SQL Server ve Azure SQL Veritabanı geliştirmeleri.
STRING_SPLIT İşlev kullanılamıyor. STRING_SPLIT İşlev, uyumluluk düzeyi 130 veya üzeri altında kullanılabilir. Veritabanı uyumluluk düzeyiniz 130'dan düşükse SQL Server işlevi bulamaz ve yürütemez STRING_SPLIT .

SQL Server'ın SQL Server 2016 (13.x) öncesi önceki sürümlerinde izleme bayrağı 4199 altında olan düzeltmeler artık varsayılan olarak etkindir. Uyumluluk modu 130 ile. İzleme bayrağı 4199, SQL Server 2016 (13.x) sonrasında yayımlanan yeni sorgu iyileştirici düzeltmeleri için geçerli olmaya devam edecektir. SQL Veritabanı'nda eski sorgu iyileştiricisini kullanmak için uyumluluk düzeyi 110'ı seçmeniz gerekir. İzleme Bayrağı 4199 hakkında bilgi için bkz. İzleme Bayrağı 4199.

Düşük uyumluluk düzeyleri ile düzey 120 arasındaki farklar

Bu bölümde, uyumluluk düzeyi 120 ile sunulan yeni davranışlar açıklanmaktadır.

Uyumluluk düzeyi ayarı 110 veya daha düşük Uyumluluk düzeyi ayarı 120
Eski sorgu iyileştiricisi kullanılır. SQL Server 2014 (12.x), sorgu planlarını oluşturan ve en iyi duruma getiren bileşende önemli geliştirmeler içerir. Bu yeni sorgu iyileştirici özelliği, veritabanı uyumluluk düzeyi 120'nin kullanımına bağlıdır. Bu geliştirmelerden yararlanmak için veritabanı uyumluluk düzeyi 120 kullanılarak yeni veritabanı uygulamaları geliştirilmelidir. SQL Server'ın önceki sürümlerinden geçirilen uygulamalar, iyi bir performansın korunduğunu veya iyileştirildiğini onaylamak için dikkatlice test edilmelidir. Performans düşerse, eski sorgu iyileştirici metodolojisini kullanmak için veritabanı uyumluluk düzeyini 110 veya daha eski olarak ayarlayabilirsiniz.

Veritabanı uyumluluk düzeyi 120, modern veri ambarı ve OLTP iş yükleri için ayarlanmış yeni bir kardinalite tahmin aracı kullanır. Performans sorunları nedeniyle veritabanı uyumluluk düzeyini 110 olarak ayarlamadan önce, SQL Server 2016'daki yenilikler'inSorgu Planları bölümündeki önerilere bakın.
120'den düşük uyumluluk düzeylerinde, bir tarih değeri dize değerine dönüştürülürken dil ayarı yoksayılır. Bu davranış yalnızca tarih türüne özgüdür. Örnekler bölümünde B örneğine bakın. Tarih değeri dize değerine dönüştürülürken dil ayarı yoksayılamaz.
Yan tümcenin sağ tarafındaki EXCEPT özyinelemeli başvurular sonsuz bir döngü oluşturur. Örnekler bölümündeki örnek C, bu davranışı gösterir. Yan EXCEPT tümcesindeki özyinelemeli başvurular ANSI SQL standardına uygun bir hata oluşturur.
Özyinelemeli ortak tablo ifadesi (CTE), yinelenen sütun adlarına izin verir. Özyinelemeli CTE yinelenen sütun adlarına izin vermez.
Devre dışı bırakılan tetikleyiciler, tetikleyiciler değiştirilirse etkinleştirilir. Tetikleyicinin değiştirilmesi tetikleyicinin durumunu (etkin veya devre dışı) değiştirmez.
OUTPUT INTO tablo yan tümcesi öğesini IDENTITY_INSERT SETTING = OFF yoksayar ve açık değerlerin eklenmesine izin verir. KAPALI olarak ayarlandığında, tabloya IDENTITY_INSERT bir kimlik sütunu için açık değerler ekleyemezsiniz.
Veritabanı kapsaması kısmi olarak ayarlandığında, bir $action deyiminin OUTPUT yan tümcesindeki MERGE alanın doğrulanması harmanlama hatası döndürebilir. Bir $action deyiminin yan tümcesi tarafından MERGE döndürülen değerlerin harmanlanması, sunucu harmanlaması yerine veritabanı harmanlamasıdır ve harmanlama çakışması hatası döndürülmaz.
Deyimi SELECT INTO her zaman tek iş parçacıklı bir ekleme işlemi oluşturur. Deyimi SELECT INTO paralel ekleme işlemi oluşturabilir. Çok sayıda satır eklerken paralel işlem performansı artırabilir.

Düşük uyumluluk düzeyleri ile düzey 100 ve 110 arasındaki farklar

Bu bölümde, uyumluluk düzeyi 110 ile sunulan yeni davranışlar açıklanmaktadır. Bu bölüm, 110'un üzerindeki uyumluluk düzeyleri için de geçerlidir.

Uyumluluk düzeyi ayarı 100 veya daha düşük En az 110 uyumluluk düzeyi ayarı
Ortak dil çalışma zamanı (CLR) veritabanı nesneleri CLR'nin 4. sürümüyle yürütülür. Ancak, CLR'nin 4. sürümünde sunulan bazı davranış değişiklikleri önlenir. Daha fazla bilgi için bkz . CLR tümleştirmesindeki yenilikler CLR veritabanı nesneleri CLR'nin 4. sürümüyle yürütülür.
XQuery işlevleri dize uzunluğu ve alt dize her vekili iki karakter olarak sayar. XQuery işlevi dize uzunluğu ve alt dize her vekili bir karakter olarak sayar.
PIVOT özyinelemeli ortak tablo ifadesi (CTE) sorgusunda izin verilir. Ancak, gruplandırma başına birden çok satır olduğunda sorgu yanlış sonuçlar döndürür. PIVOT özyinelemeli ortak tablo ifadesi (CTE) sorgusunda izin verilmez. Bir hata döndürülür.
RC4 algoritması yalnızca geriye dönük uyumluluk için desteklenir. Yeni malzemeler yalnızca veritabanı uyumluluk düzeyi 90 veya 100 olduğunda RC4 veya RC4_128 kullanılarak şifrelenebilir. (Önerilmez.) SQL Server 2012'de (11.x), RC4 veya RC4_128 kullanılarak şifrelenen malzemenin şifresi herhangi bir uyumluluk düzeyinde çözülebilir. Yeni malzemeler RC4 veya RC4_128 kullanılarak şifrelenemez. Bunun yerine AES algoritmalarından biri gibi daha yeni bir algoritma kullanın. SQL Server 2012'de (11.x), RC4 veya RC4_128 kullanılarak şifrelenen malzemenin şifresi herhangi bir uyumluluk düzeyinde çözülebilir.
CAST ve CONVERT veri türlerindeki ve işlemleri için varsayılan stil, hesaplanan sütun ifadesinde her iki tür de kullanılması dışında 121'dir. Hesaplanan sütunlar için varsayılan stil 0'dır. Bu davranış, hesaplanmış sütunlar oluşturulduğunda, otomatik parametreleştirme içeren sorgularda kullanıldığında veya kısıtlama tanımlarında kullanıldığında etkilenir.

Örnekler bölümündeki örnek D, 0 ile 121 stilleri arasındaki farkı gösterir. Yukarıda açıklanan davranışı göstermez. Tarih ve saat stilleri hakkında daha fazla bilgi için bkz. CAST ve CONVERT.
Uyumluluk düzeyi 110'un altındaCAST ve CONVERT veri türlerinde ve işlemleri için varsayılan stil her zaman 121'dir. Sorgunuz eski davranışa bağlıysa, 110'dan küçük bir uyumluluk düzeyi kullanın veya etkilenen sorguda 0 stilini açıkça belirtin.

Veritabanının uyumluluk düzeyi 110'a yükseltilmesi, diskte depolanan kullanıcı verilerini değiştirmez. Bu verileri uygun şekilde el ile düzeltmeniz gerekir. Örneğin, yukarıda açıklanan hesaplanan sütun ifadesini içeren bir kaynaktan tablo oluşturmak için kullandıysanız SELECT INTO , veriler (stil 0 kullanılarak) hesaplanan sütun tanımının kendisi yerine depolanır. Bu verileri 121 stiliyle eşleşecek şekilde el ile güncelleştirmeniz gerekir.
+ (Toplama) işleci datetime, time, datetime2 veya datetimeoffset türünde bir işlenene, diğer işlenen datetime veya smalldatetime türündeyse uygulanabilir. Ekleme işlecini date, time, datetime2 veyadatetimeoffset türünde bir işlenene ve datetime veya smalldatetime türünde bir işlenene uygulama girişimi 402 hatasına neden olur.
Smalldatetime türünde, bölümlenmiş görünümde başvuruda bulunan uzak tablolardaki tüm sütunlar datetime olarak eşlenir. Yerel tablolardaki karşılık gelen sütunlar (seçme listesindeki aynı sıralı konumda) datetime türünde olmalıdır. Bölümlenmiş görünümde başvuruda bulunan smalldatetime türünde uzak tablolardaki tüm sütunlar smalldatetime olarak eşlenir. Yerel tablolardaki karşılık gelen sütunlar (seçme listesindeki aynı sıralı konumda) smalldatetime türünde olmalıdır.

110'a yükselttikten sonra, veri türü uyuşmazlığı nedeniyle dağıtılmış bölümlenmiş görünüm başarısız olur. Uzak tablodaki veri türünü datetime olarak değiştirerek veya yerel veritabanının uyumluluk düzeyini 100 veya daha düşük olarak ayarlayarak bu sorunu çözebilirsiniz.
SOUNDEX işlevi aşağıdaki kuralları uygular:

1) Kodda SOUNDEX aynı sayıya sahip iki harf ayrıştırılırken büyük harf H veya büyük harf W yoksayılır.

2) character_expression ilk iki karakteri kodda aynı sayıya SOUNDEX sahipse, her iki karakter de eklenir. Aksi takdirde, bir dizi yan yana ünsüz kodda aynı sayıya SOUNDEX sahipse, ilki dışında bunların tümü dışlanır.
SOUNDEX işlevi aşağıdaki kuralları uygular:

1) Büyük/küçük harf H veya büyük harf W kodda SOUNDEX aynı sayıya sahip iki consonant ayırırsa, sağdaki consonant yoksayılır

2) Yan yana ünsüzler kümesi kodda aynı sayıya SOUNDEX sahipse, ilki dışında bunların tümü hariç tutulur.

Ek kurallar, işlev tarafından hesaplanan değerlerin SOUNDEX önceki uyumluluk düzeyleri altında hesaplanan değerlerden farklı olmasını sağlar. Uyumluluk düzeyi 110'a yükselttikten sonra, işlevi kullanan SOUNDEX dizinleri, yığınları veya CHECK kısıtlamalarını yeniden oluşturmanız gerekebilir. Daha fazla bilgi için bkz . SOUNDEX.
STRING_AGG olmadan <order_clause>kullanılabilir. STRING_AGG isteğe bağlı <order_clause>ile kullanılabilir. Daha fazla bilgi için bkz. STRING_AGG

Uyumluluk düzeyi 90 ile düzey 100 arasındaki farklar

Bu bölümde, uyumluluk düzeyi 100 ile sunulan yeni davranışlar açıklanmaktadır.

Uyumluluk düzeyi ayarı 90 Uyumluluk düzeyi ayarı 100 Etki olasılığı
QUOTED_IDENTIFIER ayarı, oturum düzeyi ayarından bağımsız olarak oluşturulduğunda çok durumlu tablo değerli işlevler için her zaman AÇILDI olarak ayarlanır. Çok durumlu tablo değerli işlevler oluşturulduğunda QUOTED IDENTIFIER oturum ayarı kabul edilir. Orta
Bölüm işlevi oluşturduğunuzda veya değiştirdiğinizde, işlevdeki tarih saat ve smalldatetime değişmez değerleri dil ayarı olarak US_English varsayılarak değerlendirilir. Geçerli dil ayarı, bölüm işlevindeki tarih saat ve smalldatetime değişmez değerlerini değerlendirmek için kullanılır. Orta
ve FOR BROWSE deyimlerinde INSERTSELECT INTO yan tümcesine izin verilir (ve yoksayılır). FOR BROWSE ve INSERT deyimlerinde SELECT INTO yan tümcesine izin verilmez. Orta
Yan tümcesinde tam metin koşullarına OUTPUT izin verilir. Yan tümcesinde tam metin koşullarına OUTPUT izin verilmez. Düşük
CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLISTve DROP FULLTEXT STOPLIST desteklenmez. Sistem durdurma listesi otomatik olarak yeni tam metin dizinleriyle ilişkilendirilir. CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLISTve DROP FULLTEXT STOPLIST desteklenir. Düşük
MERGE ayrılmış anahtar sözcük olarak zorlanmaz. MERGE tam olarak ayrılmış bir anahtar sözcüktür. deyimi MERGE hem 100 hem de 90 uyumluluk düzeyleri altında desteklenir. Düşük
INSERT deyiminin <dml_table_source> bağımsız değişkeni kullanıldığında söz dizimi hatası oluşur. İç içe INSERT, UPDATE, DELETE veya MERGE deyiminde output yan tümcesinin sonuçlarını yakalayabilir ve bu sonuçları hedef tabloya veya görünüme ekleyebilirsiniz. Bu, INSERT deyiminin <dml_table_source> bağımsız değişkeni kullanılarak yapılır. Düşük
Belirtilmediği NOINDEX sürece DBCC CHECKDB veya tek bir tablo veya DBCC CHECKTABLE dizinlenmiş görünümde ve tüm kümelenmemiş ve XML dizinlerinde hem fiziksel hem de mantıksal tutarlılık denetimleri gerçekleştirir. Uzamsal dizinler desteklenmez. Belirtilmediği NOINDEX sürece DBCC CHECKDB veya DBCC CHECKTABLE tek bir tabloda ve tüm kümelenmemiş dizinlerinde hem fiziksel hem de mantıksal tutarlılık denetimleri gerçekleştirir. Ancak XML dizinleri, uzamsal dizinler ve dizinlenmiş görünümlerde varsayılan olarak yalnızca fiziksel tutarlılık denetimleri gerçekleştirilir.

belirtilirse WITH EXTENDED_LOGICAL_CHECKS , mantıksal denetimler dizinlenmiş görünümler, XML dizinleri ve uzamsal dizinler üzerinde gerçekleştirilir ve burada bulunur. Varsayılan olarak, fiziksel tutarlılık denetimleri mantıksal tutarlılık denetimleri öncesinde gerçekleştirilir. NOINDEX de belirtilirse, yalnızca mantıksal denetimler gerçekleştirilir.
Düşük
Output yan tümcesi bir veri işleme dili (DML) deyimiyle kullanıldığında ve deyim yürütme sırasında bir çalışma zamanı hatası oluştuğunda, tüm işlem sonlandırılır ve geri alınır. Bir OUTPUT yan tümce bir veri işleme dili (DML) deyimiyle kullanıldığında ve deyim yürütme sırasında bir çalışma zamanı hatası oluştuğunda, davranış ayara SET XACT_ABORT bağlıdır. KAPALI ise SET XACT_ABORT , yan tümcesi kullanılarak OUTPUT DML deyimi tarafından oluşturulan bir deyim durdurma hatası deyimini sonlandırır, ancak toplu işlemin yürütülmesi devam eder ve işlem geri alınamaz. SET XACT_ABORT ON ise, OUTPUT yan tümcesi kullanılarak DML deyimi tarafından oluşturulan tüm çalışma zamanı hataları toplu işlemi sonlandırır ve işlem geri alınır. Düşük
KÜP ve ROLLUP ayrılmış anahtar sözcükler olarak zorlanmaz. CUBE ve ROLLUP GROUP BY yan tümcesi içinde ayrılmış anahtar sözcüklerdir. Düşük
Katı doğrulama, XML anyType türünün öğelerine uygulanır. Lax doğrulaması , anyType türünün öğelerine uygulanır. Daha fazla bilgi için bkz. Joker karakter bileşenleri ve içerik doğrulama. Düşük
xsi:nil ve xsi:type özel öznitelikleri, veri işleme dili deyimleri tarafından sorgulanamaz veya değiştirilemez.

Bu, /e/@xsi:nil/e/@* ve xsi:type özniteliklerini yoksayarken başarısız olduğu anlamına gelir. Ancak, /e olsa bile ile tutarlılık için SELECT xmlCol ve xsi:nil = "false" özniteliklerini döndürür.
xsi:nil ve xsi:type özel öznitelikleri normal öznitelikler olarak depolanır ve sorgulanabilir ve değiştirilebilir.

Örneğin, sorgu SELECT x.query('a/b/@*') yürütülürken xsi:nil ve xsi:type gibi tüm öznitelikler döndürülür. Sorguda bu türleri dışlamak için değerini veya @*yerine @*[namespace-uri(.) != "insert xsi ad alanı uri'siyle" değiştirin (local-name(.) = "type"local-name(.) ="nil".
Düşük
XML sabit dize değerini SQL Server tarih saat türüne dönüştüren kullanıcı tanımlı bir işlev belirlenimci olarak işaretlenir. XML sabit dize değerini SQL Server tarih saat türüne dönüştüren kullanıcı tanımlı bir işlev belirlenimci değil olarak işaretlenir. Düşük
XML birleşim ve liste türleri tam olarak desteklenmez. Birleşim ve liste türleri, aşağıdaki işlevler de dahil olmak üzere tam olarak desteklenir:

Liste birleşimi

Birleşim birliği

Atomik türlerin listesi

Birleşim listesi
Düşük
Bir xQuery yöntemi için gereken SET seçenekleri, yöntem bir görünümde veya satır içi tablo değerli işlevde bulunduğunda doğrulanmaz. Bir xQuery yöntemi için gereken SET seçenekleri, yöntem bir görünümde veya satır içi tablo değerli işlevde bulunduğunda doğrulanır. Yöntemin SET seçenekleri yanlış ayarlanırsa bir hata oluşur. Düşük
Satır sonu karakterleri (satır başı ve satır besleme) içeren XML öznitelik değerleri XML standardına göre normalleştirilmemiştir. Yani, her iki karakter de tek satır besleme karakteri yerine döndürülür. Satır sonu karakterleri (satır başı ve satır besleme) içeren XML öznitelik değerleri XML standardına göre normalleştirilir. Diğer bir ifadeyle, dış ayrıştırılmış varlıklardaki tüm satır sonları (belge varlığı dahil) hem iki karakterli dizi #xD #xA hem de #xA takip etmeyen #xD tek bir #xA karaktere çevrilerek girişte normalleştirilir.

Satır sonu karakterleri içeren dize değerlerini taşımak için öznitelikleri kullanan uygulamalar, gönderildikçe bu karakterleri geri almaz. Normalleştirme işlemini önlemek için, tüm satır sonu karakterlerini kodlamak için XML sayısal karakter varlıklarını kullanın.
Düşük
ve sütun özellikleri ROWGUIDCOLIDENTITY yanlış bir kısıtlama olarak adlandırılabilir. Örneğin deyimi CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) yürütülür, ancak kısıtlama adı korunmaz ve kullanıcı tarafından erişilemez. sütun özellikleri ROWGUIDCOL ve IDENTITY kısıtlama olarak adlandırılamaz. Hata 156 döndürülür. Düşük
gibi UPDATE T1 SET @v = column_name = <expression> iki yönlü bir atama kullanarak sütunları güncelleştirmek beklenmeyen sonuçlar verebilir çünkü değişkenin canlı değeri, deyim başlatma değeri yerine deyim yürütmesi sırasında and WHERE yan tümcesi gibi ON diğer yan tümcelerde kullanılabilir. Bu, koşul anlamlarının satır başına tahmin edilemeyen şekilde değişmesine neden olabilir.

Bu davranış yalnızca uyumluluk düzeyi 90 olarak ayarlandığında geçerlidir.
İki yönlü atama kullanarak sütunların güncelleştirilmesi beklenen sonuçları verir çünkü deyimi yürütme sırasında sütunun yalnızca deyimi başlatma değerine erişilir. Düşük
Üst düzey UNION işleç içeren bir deyimde değişken atamaya izin verilir, ancak beklenmeyen sonuçlar döndürür. E örneğinde daha fazla bilgi edinin. Üst düzey UNION işleci içeren bir deyimde değişken atamaya izin verilmez. Hata 10734 döndürüldü. E örneğinde önerilen bir yeniden yazma bulun. Düşük
{fn CONVERT()} ODBC işlevi, dilin varsayılan tarih biçimini kullanır. Bazı diller için varsayılan biçim YDM'dir ve CONVERT() gibi {fn CURDATE()}bir YMD biçimi bekleyen diğer işlevlerle birleştirildiğinde dönüştürme hatalarına neden olabilir. ODBC işlevi {fn CONVERT()} ODBC veri türlerine SQL_TIMESTAMP, SQL_DATE, SQL_TIME, SQLDATE, SQL_TYPE_TIME ve SQL_TYPE_TIMESTAMP dönüştürürken 121 stilini (dilden bağımsız YMD biçimi) kullanır. Düşük
gibi DATEPART tarih saat iç değerleri, dize giriş değerlerinin geçerli tarih saat değişmez değerleri olmasını gerektirmez. Örneğin, SELECT DATEPART (year, '2007/05-30') başarıyla derler. Gibi DATEPART tarih saat iç değerleri, dize giriş değerlerinin geçerli tarih saat değişmez değerleri olmasını gerektirir. Geçersiz bir tarih saat değişmez değeri kullanıldığında hata 241 döndürülür. Düşük
REPLACE işlevinin ilk giriş parametresinde belirtilen sondaki boşluklar, parametre char türünde olduğunda kırpılır. Örneğin, deyiminde SELECT '<' + REPLACE(CONVERT(char(6), 'ABC '), ' ', 'L') + '>'değeri 'ABC ' yanlış olarak 'ABC'değerlendirilir. Sondaki boşluklar her zaman korunur. İşlevin önceki davranışını kullanan uygulamalar için işlevin RTRIM ilk giriş parametresini belirtirken işlevini kullanın. Örneğin, aşağıdaki söz dizimi SQL Server 2005 davranışını yeniden oluşturur: SELECT '<' + REPLACE(RTRIM(CONVERT(char(6), 'ABC ')), ' ', 'L') + '>'. Düşük

Ayrılmış anahtar sözcükler

Uyumluluk ayarı, Veritabanı Altyapısı tarafından ayrılmış anahtar sözcükleri de belirler. Aşağıdaki tabloda, uyumluluk düzeylerinin her biri tarafından sunulan ayrılmış anahtar sözcükler gösterilmektedir.

Uyumluluk düzeyi ayarı Ayrılmış anahtar sözcükler
130 Belirlenecek.
120 Yok.
110 WITHIN GROUP, TRY_CONVERT, SEMANTICKEYPHRASETABLE, SEMANTICSIMILARITYDETAILSTABLE, , SEMANTICSIMILARITYTABLE
100 CUBE, MERGE, ROLLUP
90 EXTERNAL, PIVOT, UNPIVOT, REVERT, , TABLESAMPLE

Belirli bir uyumluluk düzeyinde, ayrılmış anahtar sözcükler bu düzeyde veya altında tanıtılan tüm anahtar sözcükleri içerir. Bu nedenle, örneğin, düzey 110'daki uygulamalar için, önceki tabloda listelenen tüm anahtar sözcükler ayrılmıştır. Düşük uyumluluk düzeylerinde düzey-100 anahtar sözcükleri geçerli nesne adları olarak kalır, ancak bu anahtar sözcüklere karşılık gelen düzey-110 dil özellikleri kullanılamaz.

Bir anahtar sözcük kullanıma sunulduğunda ayrılmış olarak kalır. Örneğin, uyumluluk düzeyi 90'da sunulan ayrılmış PIVOT anahtar sözcüğü de 100, 110 ve 120 düzeylerinde ayrılmıştır.

Bir uygulama, uyumluluk düzeyi için anahtar sözcük olarak ayrılmış bir tanımlayıcı kullanırsa, uygulama başarısız olur. Buna geçici bir çözüm olarak tanımlayıcıyı köşeli ayraç ([]) veya tırnak işaretleri ("") arasına alın; örneğin, tanımlayıcıyı EXTERNAL kullanan bir uygulamayı uyumluluk düzeyi 90'a yükseltmek için, tanımlayıcıyı veya [EXTERNAL]olarak "EXTERNAL" değiştirebilirsiniz.

Daha fazla bilgi için bkz . Ayrılmış Anahtar Sözcükler.

İzinler

Veritabanı üzerinde ALTER izni gereklidir.

Örnekler

A. Uyumluluk düzeyini değiştirme

Aşağıdaki örnek, AdventureWorks2022 veritabanının uyumluluk düzeyini SQL Server 2019 (15.x) için varsayılan değer olan 150 olarak değiştirir.

ALTER DATABASE AdventureWorks2022
SET COMPATIBILITY_LEVEL = 150;
GO

Aşağıdaki örnek geçerli veritabanının uyumluluk düzeyini döndürür.

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

B. Uyumluluk düzeyi 120 veya üzeri dışında SET LANGUAGE deyimini yoksayma

Aşağıdaki sorgu, uyumluluk düzeyi 120 veya üzeri dışında deyimini yoksayar SET LANGUAGE .

SET DATEFORMAT dmy;

DECLARE @t2 AS DATE = '12/5/2011';

SET LANGUAGE dutch;

SELECT CONVERT (VARCHAR (11), @t2, 106);
GO

Uyumluluk düzeyi 120'den küçük olduğunda sonuçlar: 12 May 2011

Uyumluluk düzeyi 120 veya üzeri olarak ayarlandığında elde edilecek sonuçlar: 12 mei 2011

C. 110 veya daha düşük uyumluluk düzeyi ayarı için EXCEPT yan tümcesinin sağ tarafındaki özyinelemeli başvurular sonsuz döngü oluşturur

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

D. 0 ve 121 stilleri arasındaki fark

Uyumluluk düzeyi 110'dan düşük olduğunda, CAST ve CONVERT veri türlerindeki ve işlemleri için varsayılan stil 121'dir, ancak hesaplanan sütun ifadesinde her iki tür de kullanılır. Hesaplanan sütunlar için varsayılan stil 0'dır.

Uyumluluk düzeyi 110 veya daha yüksek olduğunda, CAST ve CONVERT veri türlerinde ve işlemleri için varsayılan stil her zaman 121'dir. Daha fazla bilgi için bkz. Düşük uyumluluk düzeyleri ile düzey 100 ve 110 arasındaki farklar .

Tarih ve saat stilleri hakkında daha fazla bilgi için bkz. CAST ve CONVERT.

DROP TABLE IF EXISTS t1;
GO

CREATE TABLE t1
(
    c1 TIME (7),
    c2 DATETIME2
);
GO

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

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;
GO

Bu, aşağıdaki gibi sonuçlar döndürür:

TimeStyle0 TimeStyle121 Datetime2Style0 Datetime2Style121
15:15 15:15:35.8100000 7 Haziran 2011 15:15 2011-06-07 15:15:35.8130000

E. Değişken ataması - üst düzey UNION işleci

Veritabanı uyumluluk düzeyi ayarı olan 90'ın altında, en üst düzey UNION işlecini içeren bir deyimde değişken atamaya izin verilir, ancak beklenmeyen sonuçlar döndürür. Örneğin, aşağıdaki deyimlerde yerel değişkene @v iki tablonun birleşiminden sütunun BusinessEntityID değeri atanır. Tanım gereği, SELECT deyimi birden fazla değer döndürdüğünde, değişkene döndürülen son değer atanır. Bu durumda değişkene son değer doğru şekilde atanır, ancak SELECT UNION deyiminin sonuç kümesi de döndürülür.

ALTER DATABASE AdventureWorks2022
SET COMPATIBILITY_LEVEL = 110;
GO

USE AdventureWorks2022;
GO

DECLARE @v AS INT;

SELECT @v = BusinessEntityID
FROM HumanResources.Employee
UNION ALL
SELECT @v = BusinessEntityID
FROM HumanResources.EmployeeAddress;

SELECT @v;

100 ve üzeri veritabanı uyumluluk düzeyi ayarı altında, üst düzey UNION işleci içeren bir deyimde değişken atamaya izin verilmez. Hata 10734 döndürüldü.

Hatayı düzeltmek için aşağıdaki örnekte gösterildiği gibi sorguyu yeniden yazın.

DECLARE @v AS INT;

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

SELECT @v;