Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure 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.
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.
- , ,
tempdb
model
ve Kaynak veritabanlarınınmsdb
uyumluluk 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 ipucuylaOPTION (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:
Sistem nesnelerinde sütun adları değiştirildi. SQL Server 2012'de (11.x) içindeki
single_pages_kb
sütunsys.dm_os_sys_info
olarakpages_kb
yeniden adlandırıldı. Uyumluluk düzeyi ne olursa olsun, sorguSELECT single_pages_kb FROM sys.dm_os_sys_info
207 (Geçersiz sütun adı) hatası oluşturur.Sistem nesneleri kaldırıldı. SQL Server 2012'de (11.x)
sp_dboption
kaldırıldı. Uyumluluk düzeyi ne olursa olsun, deyimiEXEC sp_dboption 'AdventureWorks2022', 'autoshrink', 'FALSE';
2812 (Could not find stored procedure 'sp_dboption'
) hatasını oluşturur.Hataya neden olan değişiklikler hakkında daha fazla bilgi için bkz:
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:
İ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
130Kapalı
Hakkında
Kapalı
HakkındaSakat
Etkinleştirildi
Etkin
EtkinleştirildiDevre dışı
Etkinleştirildi
Devre dışı
Etkinleştirildi14 (SQL Server 2017 (14.x)) 100 - 120
130
140Kapalı
Hakkında
Kapalı
Hakkında
Kapalı
HakkındaSakat
Etkinleştirildi
Etkin
Etkinleştirildi
Etkin
EtkinleştirildiDevre dışı
Etkinleştirildi
Devre dışı
Etkinleştirildi
Devre dışı
Etkinleştirildi15 (SQL Server 2019 (15.x)) ve (Azure SQL Veritabanı) 100 - 120
130 - 140
Yüz elliKapalı
Hakkında
Kapalı
Hakkında
Kapalı
HakkındaSakat
Etkinleştirildi
Etkin
Etkinleştirildi
Etkin
EtkinleştirildiDevre dışı
Etkinleştirildi
Devre dışı
Etkinleştirildi
Devre dışı
Etkinleştirildi16 (SQL Server 2022 (16.x)) ve (Azure SQL Veritabanı) 100 - 120
130 - 150
160Kapalı
Hakkında
Kapalı
Hakkında
Kapalı
HakkındaSakat
Etkinleştirildi
Etkin
Etkinleştirildi
Etkin
EtkinleştirildiDevre dışı
Etkinleştirildi
Devre dışı
Etkinleştirildi
Devre dışı
Etkinleştirildi17 (SQL Server 2025 (17.x) Önizleme, Azure SQL Veritabanı ve Microsoft Fabric'te SQL veritabanı) 100 - 120
130 - 160
170Kapalı
Hakkında
Kapalı
Hakkında
Kapalı
HakkındaSakat
Etkinleştirildi
Etkin
Etkinleştirildi
Etkin
EtkinleştirildiDevre dışı
Etkinleştirildi
Devre dışı
Etkinleştirildi
Devre dışı
EtkinleştirildiYanlış 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.
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
130Devre dışı
Etkinleştirildi14 (SQL Server 2017 (14.x))1 < 140
140Devre dışı
Etkinleştirildi15 (SQL Server 2019 (15.x))1 < 150
Yüz elliDevre dışı
Etkinleştirildi16 (SQL Server 2022 (16.x))1 < 160
160Devre dışı
Etkinleştirildi17 (SQL Server 2025 (17.x) Önizleme)1 < 170
170Devre dışı
Etkinleştirildi1 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_256 CERTIFICATE . |
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 dizinleri ile Toplu iş modu ile Satır Modu değişiklikleri karşılaştırması:
|
İ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ır2) 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 INSERT SELECT 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 STOPLIST ve DROP FULLTEXT STOPLIST desteklenmez. Sistem durdurma listesi otomatik olarak yeni tam metin dizinleriyle ilişkilendirilir. |
CREATE FULLTEXT STOPLIST , ALTER FULLTEXT STOPLIST ve 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 ROWGUIDCOL IDENTITY 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;
İlgili içerik
- Daha yeni SQL Server'a yükseltme sırasında performans kararlılığını koruma
- Veritabanı uyumluluk düzeyini değiştirme ve Sorgu Deposu'nı kullanma
- Uyumluluk sertifikası
- VERİ TABANINI DEĞİŞTİR (Transact-SQL)
- Sorgu Ayarlama Yardımcısı'nı kullanarak veritabanlarını yükseltme
- VERITABANı OLUŞTURMA
- Veritabanı uyumluluk düzeyini görüntüleme veya değiştirme
- Sorgu Deposu İpuçları