DATABASE uyumluluk düzey (Transact-SQL) ALTER

Belirtilen sürüm ile uyumlu olmak için belirli bir veritabanı davranışları ayarlar. SQL Server. Yeni SQL Server 2008, aşağıdaki sözdizimini ALTER DATABASE değiştirir sp_dbcmpt düzey uyumlu veritabanı ayarlanması yordamını düzey.ALTER DATABASE diğer seçenekler için bkz: ALTER DATABASE Transact-SQL).

Topic link iconTransact-SQL sözdizimi kuralları

ALTER DATABASE database_name 
SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 }

Bağımsız değişkenler

  • database_name
    Değiştirilecek veritabanının adıdır.

  • compatibility_level {80 | 90 | 100}
    sürüm SQL Server Veritabanı uyumlu yapılacağı olduğu. Değer aşağıdakilerden biri olmalıdır:

    80 = SQL Server 2000

    90 = SQL Server 2005

    100 = SQL Server 2008

Remarks

Tüm yüklemeler için SQL Server 2008, varsayılan uyumluluk düzey 100'dür. Oluşturulan veritabanlarının SQL Server 2008 için Ayarla düzey model veritabanı daha düşük bir uyumluluk olmadıkça düzey. Bir veritabanı için yükseltme SQL Server 2008 bir önceki sürümünden SQL Server, veritabanında varolan uyumluluğunu korur düzey en az 80 ise. Uyumluluk düzey Aşağıda 80 olan bir veritabanı yükseltme veritabanı 80 uyumluluk düzeyini ayarlar.Bu, sistem hem de kullanıcı veritabanlarına uygulanır.Uyumluluğu değiştirmek için ALTER DATABASE kullanmak düzey veritabanının.Geçerli uyumluluk görüntülemeye düzey the compatibility_ bir veritabanı, query düzey sys.databases katalog görünümünde sütun.

Geri uyumluluk için uyumluluk düzey'ni kullanma

Uyumluluk düzey tüm sunucu, yalnızca belirtilen veritabanı davranışlar'ı etkiler.Uyumluluk düzey yalnızca kısmi geriye dönük uyumluluk önceki sürümleriyle sağlar. SQL Server. Uyumluluk düzey ara geçiş yardımcı, ilgili uyumluluk düzey ayarıyla denetlenir davranışlar sürüm farklılıkları gidermek için kullanın.Varolan, SQL Server davranış farklılıkları etkilenen uygulamalar SQL Server 2008, uygulamanın gerektiği biçimde çalışması için dönüştürme. Daha sonra ALTER DATABASE uyumluluk düzey, 100'e değiştirmek için kullanın.Veritabanının geçerli (varsayılan veritabanı oturumu açma veya bir USE deyiminde belirtilen olup olmadığını gibi) sonraki yapıldığında, veritabanı için yeni Uyumluluk ayarı etkin duruma gelir.

En iyi yöntemler

Kullanıcılar veritabanına bağlıyken, uyumluluk düzeyini değiştirme, etkin sorgularını yanlış sonuç kümeleri oluşturabilir.Bir sorgu planı derleniyor sırada uyumluluk düzey değişirse, örneğin, derlenmiş planı her iki eski ve yeni uyumluluk düzeyleri üzerinde yanlış bir planı ve büyük olasılıkla da tutarsız sonuçlar elde temel.Ayrıca, sorun planı plan önbelleğinde yerleştirilmiş olması durumunda compounded ve sonraki sorguları için yeniden kullanılabilir.Geçersiz sorgu sonuçlarını önlemek için uyumlu değiştirmek için aşağıdaki yordamı öneririz düzey veritabanı:

  1. Veritabanı tek kullanıcı erişim modu, ALTER DATABASE küme SINGLE_USER kullanarak ayarlayın.

  2. Uyumluluğu değiştirme düzey veritabanının.

  3. Veritabanı, ALTER DATABASE küme MULTI_USER kullanarak, çok kullanıcılı erişim modunda yerleştirin.

  4. Veritabanı erişim modu ayarlama hakkında daha fazla bilgi için bkz: ALTER DATABASE Transact-SQL).

küme seçenekleri

Yeni işlevler altında eski uyumluluk düzeyleri çalışabilir, ancak küme seçenekleri ayarlamaları gereksinim duyabilir.Örneğin, xml uyumluluk düzey 80'altında veri türüne uygun ANSI küme seçenekleri gerektirir. Ayrıca, veritabanı uyumluluk düzey olduğunda küme 90 ya da üstü küme ting ANSı_WARNıNGS'IÇIN örtülü olarak küme s ARITHABORT açık ON için.Veritabanı uyumluluk düzey küme, 80 ARITHABORT seçeneği açık olmalıdır küme açık.Daha fazla bilgi için bkz:sonuçlar etkiler, küme seçenekleri.

Uyumluluk düzeyleri ve saklı yordamlar

Bu, bir saklı yordam çalıştırıldığında, geçerli veritabanı içinde tanımlandığı uyumluluk düzey kullanır.Derlenmiş bir veritabanının Uyumluluk ayarı değiştirildiğinde, saklı yordamlar tümünün otomatik olarak buna göre çekirdekler.

Uyumluluk arasındaki farklar, 90, 80 ve düzey düzey

Bu bölümde uyumluluk düzey (90) ile sunulan yeni bir davranış açıklanır.

Uyumluluk düzeyinde 90, davranış aşağıdaki değişiklikler gerçekleşir.

80 Uyumluluk düzey ayarı

90 Uyumluluk düzey ayarı

Olası etkileri

KIMDEN, kilitleme ipuçları için yan tümce, anahtar sözcüğü ILE her zaman isteğe bağlıdır.

tam metin kataloğu, tam metin dizin için kullanılır.Daha fazla bilgi için bkz:Transact-SQL ().

High

* = Ve = * işleçler dış birleştirmek için bir uyarı iletisi desteklenir.

Bu işleçler desteklenmez; dış birleştirmek anahtar sözcüğü kullanılmalıdır.

High

ZAMAN bağlama SEÇIM listesi içinde tanımlanan bir sütun için sütun başvuruları ORDER BY listesinde sütun ambiguities dikkate alınmaz ve sütun önekleri bazen göz ardı edilir.Bu, beklenmeyen bir sırada dönmek için sonuç neden olabilir.

Örneğin, ORDER BY yan tümce içeren bir tek bir parça iki sütun (<table_alias>. <column>), bir SELECT listesindeki bir sütun başvurusu kabul edilir, ancak tablo diğer ad ad adları yoksayılır kullanılır. Aşağıdaki sorguyu göz önünde bulundurun.

SELECT c1 = -c1 FROM t_table AS x ORDER BY x.c1

Çalıştırıldığında, sütun önek ORDER BY göz ardı edilir.Sıralama işlemi belirtilen kaynak sütun (oluşurx.c1) beklendiği gibi; bunun yerine bu türev oluşuyor c1 Sorgu içinde tanımlı olan sütun. Bu sorgu için yürütme planı türetilmiş sütun değerleri de önce hesaplanan ve hesaplanmış değerleri daha sonra sıralanır gösterir.

Sütun ambiguities üzerinde hatalar ortaya çıktı.ORDER BY içinde belirtilen sütun önekleri, SEÇIM listesi içinde tanımlanmış bir sütunla bağlanırken sayılır değil.

Aşağıdaki sorguyu göz önünde bulundurun.

SELECT c1 = -c1 FROM t_table AS x ORDER BY x.c1

Çalıştırıldığında, sütun önek ORDER BY yan tümcesinde yoksayılır.Sıralama işlemi belirtilen kaynak sütun (oluşur.x.c1) beklendiği gibi. Bu sorgu için yürütme planı sıralama işleç, döndürülen satırların siparişleri gösterir. t_table ve ardından türetilmiş sütun değerleri c1 SELECT listesinde tanımlı hesaplanır.

Medium

Bir INSERT SELECT UNION farklı veri türleri arasında UNION her dal doğrudan INSERT hedef sütun türü için artığını.Kendisi tarafından kullanılan union uyumsuz türü dönüşümlerinin nedeniyle başarısız olabilir bile dalı UNION sonuç türüne hiçbir zaman dönüştürülür, çünkü INSERT SELECT UNION succeed yapar.

UNION sonuç türü, INSERT SELECT bağımsız olarak türetilir.Her dal, UNION UNION sonuç tür atama ve daha sonra hedef sütun türüne INSERT atama.UNION uyumsuz türleri varsa, ilk dönüþtürme bir hata neden olabilir.Uyumluluk düzey 90'ı çalıştırmak için , bir INSERT SELECT içinde kullanılan tüm uyumsuz türü sendikalar düzeltmelisiniz.

Medium

Ekle ve güncelleştir işlemleri ile görünüm yanlış TOP yan tümce, görünüm veya başvurulan bir görünüm kullanan CHECK SEÇENEĞI, WITH yan tümce belirtin, görünümler üzerinde desteklenir.

Ekle ve güncelleştir işlemleri ile görünüm, görünüm veya başvurulan bir görünüm, TOP yan tümce kullandığında CHECK SEÇENEĞI, WITH kullanan görünümleri desteklenmez.

Medium

Değişken uzunluklu bir sütun ve sütunun sabit uzunlukta UNION sabit uzunluklu sütunu oluşturur.

Değişken uzunluklu bir sütun ve sütunun sabit uzunlukta UNION değişken uzunluklu sütunu oluşturur.

Medium

küme XACT_ABORT OFF tetikleyici içinde yoksayılır.Seçeneği, her zaman ON olarak küme.

küme XACT_ABORT KAPALı içinde bir tetikleyici ayarlayabilirsiniz.

Medium

FOR BROWSE yan tümce izin (ihmal görünümlerde ve).

FOR BROWSE yan tümce, görünümlerde izin verilmez.

Medium

Etki alanı hataları ANSI_WARNINGS tarafından denetlenmektedir.ARITHABORT küme tings ödenen, ANSI_WARNINGS ise küme KAPALı ve orada hiçbir değişiklik ARITHABORT kullanmaktır.

Etki alanı hataları ANSI_WARNINGS tarafından kontrol edilir ve önem derecesi, 16: hatalardır.ANSI_WARNINGS veya ARITHABORT ON, hata NULL değeri döndürmek yerine atılır.ARITHABORT olan üzerine bağlı olan kullanıcı pusulaları küme için OFF bu değişiklikten bozuk.

Medium

Bir geçiş sorgusu, bir uzak veri karşı kaynak [OPENROWSET veya OPENQUERY] yinelenen adları olan sütunları üretir, sütunların sorgudaki açıkça adlandırılmış sürece, yinelenen sütun adları yoksayılır.

Bir sütun, yinelenen sütun adları olan uzak veri kaynağı [OPENROWSET veya OPENQUERY] bir geçiş sorgusu oluşturur, bir hata ortaya çıkar.

Low

Dize sabitleri karakter ve varbinary sabitler 8000 büyük boyutta değerlendirilir text, ntext, veya image.

Dize sabitleri karakter ve varbinary sabitler 8000 büyük boyutta türü olarak kabul edilir varchar(max) (veya nvarchar(max) ve varbinary(max)sırasıyla). Bu tablo, SEÇIM listesi gibi bir ifade içeriyorsa, SELECT... INTO kullanılarak oluşturulan veri türünü değiştirebilirsiniz.

Low

Sayısal türleri (arasındaki karşılaştırmalarısmallint, tinyint, int, bigint, numeric, decimal, smallmoney, money) the comparand dönüştürerek, önceliği yüksektir türü için tür sıradüzeninde daha düşük öncelikli ile yapılır.

Sayısal türü değerleri, dönüştürme karşılaştırılır.Bu, geliştirilmiş performans sağlar.Ancak, bu bazı değişiklikler davranış, özellikle dönüştürme taşması özel durumlara neden olduğu durumlarda neden olabilir.

Low

Giriş 4000 karakterden daha uzunsa, dize değişkenleri yerleşik meta veriler işlevleri, kendi giriş kesecek.

Kesme nonspace karakter kaybolmasına neden olacaktır, yerleşik meta veriler işlevleri hata yükseltin.

Low

Unquoted tanımlayıcı, izin verilmeyen bir karakter kümesi değişmeden kalır.

The Transact-SQL parser supports the Unicode 3.2 standard, which changes the character classification for some international characters that are now disallowed in nondelimited identifiers.

Low

küme ANSI_WARNINGS ON küme ARITHABORT OFF kayan nokta etki alanı hataların [diğer bir deyişle negatif log() fonksiyon bağımsız değişkenleri] durum için ayarı geçersiz kılmaz.ANSI_WARNINGS AÇıK, ancak ARITHABORT KAPALı'dır, bir kayan nokta etki alanı hatalar sorguyu sona erdirilecek neden olmaz.

küme ANSI_WARNINGS ON tamamen KAPALı ARITHABORT ayarını geçersiz kılar.Etki alanı hata noktası bu kayan durum sona erdirilecek sorgu neden olur.

Low

Tamsayı olmayan sabitler izin (ihmal ORDER BY'de ve) yan tümce.

Tamsayı olmayan sabitler ORDER BY izin verilmeyen yan tümce.

Low

Boş küme deyim (küme seçenek atama ile) izin verilir.

Boş küme yan tümcesinde izin verilmez.

Low

KIMLIĞI öznitelik doğru türetilmiş bir tablo tarafından üretilen sütunlar için türetilmiş değil.

IDENTITY özniteliği, türetilen tablolar tarafından üretilen sütunlar için doğru türetilir.

Low

Aritmetik işleçler kayan nokta veri türü üzerinden null atanabilirlik özelliğini her zaman null olur.

null atanabilirlik özellik aritmetik işleç kayan nokta üzerinden veri türü nonnullable nonnullable girdileri olan ve ANSI_WARNINGS AÇıK olduğu için değiştirilir.

Low

Içinde Ekledeyim ile BIRLEŞIM, tek sonuç kümelerini tarafından üretilen türleri tüm dönüştürülür hedef sonuç türüne.

Içinde Ekledeyim ile BIRLEŞIM, çeşitli dalları yaygınlaşan türü tarafından belirlenir ve sonuçlar, hedef tablo türüne dönüştürülmesini önce o türüne dönüştürülür.

Low

Içinde seçmeHex(27) (the XML bildirimi için ' karakter) ve bu ( hex(22)" karakter) her zaman, hatta gerekli olduğunda entitized.

XML IÇIN yalnızca gerekli olduğunda hex(27) ve hex(22) entitizes.Bunlar aşağıdaki durumlarda entitized değil:

  • Öznitelik içeriği hex(27) ( ' öznitelik değerleri sınırlandırılır, karakter) entitized değil"ve hex(22) ( " öznitelik değerleri sınırlandırılır, karakter) entitized değil'.

  • Öğe içeriğinde hex(27) ve hex(22) hiçbir zaman entitized.

Low

FOR XML'DE zaman damgası değeri tamsayıya eşleştirilir.

FOR XML'DE zaman damgası değeri için bir ikili değer eşleştirilir.

Daha fazla bilgi için bkz: XML desteği IÇIN zaman damgası veri türü.

Yüksek (ise bir timestamp sütun kullanılır); aksi halde, düşük

FOR XML ve OPENXML, yüksek aralık adlarında Unicode karakterleri (3 bayt) 8 pozisyonlar kullanılarak temsil edilir.

Örneğin, 8 pozisyonlar kullanarak FOR XML Unicode kod noktası gösterir U+10000 olarak:

<a_x00010000_ c1="1" />

FOR XML ve OPENXML, yüksek aralık adlarında Unicode karakterleri (3 bayt) 6 pozisyonlar kullanılarak temsil edilir.

Örneğin, 6 pozisyonlar kullanarak FOR XML Unicode kod noktası gösterir U+10000 olarak:

<a_x010000_ c1="1" />

Low

FOR XML'DE tablo eşlemeleri AUTO modunda saydam olarak kabul edilir türetilir.

Örneğin:

USE AdventureWorks
CREATE TABLE Test(id int);
INSERT INTO Test VALUES(1);
INSERT INTO Test VALUES(2);
SELECT * FROM (SELECT a.id AS a, 
b.id AS b FROM Test a 
JOIN Test b ON a.id=b.id) 
Test FOR XML AUTO;

Zaman için uyumluluk düzey AdventureWorks olan küme yukarıdaki örnekte, 80 üretir:

<a a="1"><b b="1"/></a>

<a a="2"><b b="2"/></a>

FOR XML'DE eşlemeler AUTO modunda opaquely davranılan tablo türetilmiş.

Zaman için uyumluluk düzey AdventureWorks önceki örnek oluşturan 90 olarak küme:

<Test a="1" b="1"/>

<Test a="2" b="2"/>

Yüksek (IÇIN XML AUTO modu görünümlerde uygulanıyorsa); aksi durumda, düşük

Için dize money Yalnızca Japonca ve Korece dil, para birimi simgesi olarak bir ters eğik çizgi karakteri (\) kullanarak dönüşümleri destekler.

Ters eğik çizgi (\), tüm dize olarak kabul edilir money dönüşümler (tüm diller). isnumeric olduğunda doğru döndürür \ para birimi simgesi kullanılır.

Veritabanları için sürümlerinde SQL Server tarihi SQL Server 2005, bu yeni davranışı dizinleri keser ve üzerinde bir ISNUMERIC kullanan hesaplanan sütunlar içeren bir değer döndürür \ ve, ne, Japonca ve Kore dili olduğu için.

Low

Aritmetik işleç her zaman bile işlenenler null olmayan ve ANSI_WARNINGS veya ARITHABORT ON küme, null sonucudur.

ANSI_WARNINGS veya ARITHABORT ON, kayan bir sonucu, her iki işlenen nonnullable noktası aritmetik işleç nonnullable, olur.

Bu değişikliği null atanabilirlik başarısız olmasına neden, Kullanımıbcp gelen ikili biçimi kullanan verileri verme toplu olarak kullanılırSQL Server 2000 Kayan noktalı kullanan hesaplanan sütun içeren tabloyu noktası aritmetik işleç ve Kullanımıbcp veri kullanılan toplu alma sonra BULK INSERT miSQL Server 2005 Tablo ile aynı tanıma.

NoteNote:
Her iki seçenek de, KAPALı olduğunda Database Engine Sonuç null olarak işaretler. Bu, aynı SQL Server 2000.

Low

Bu alma için yerleşik işlevler nvarchar sağlanan değer ise bir parametresi varchar, değeri dönüştürülür nvarchar(4000). Içinde SQL Server 2000, daha büyük bir değer geçirildi, sessizce fazlalıkları atılır.

Bu alma için yerleşik işlevler nvarchar sağlanan değer ise bir parametresi varchar, değeri hala dönüştürülür nvarchar(4000). Ancak, daha büyük bir değer geçirildi, SQL Server 2008 bir hata üretir.

Uyumluluk düzey 90'ı çalıştırmak için , üzerinde kesme davranışı kullanan herhangi bir özel kod düzeltmelisiniz.

Low

Sabit uzunluklu bir (), BIR sendikayachar, binary, veya nchar) ile bir değişken uzunluklu (dizevarchar, varbinary, nvarchar) bir sabit uzunluklu sonuç dizesini döndürür.

Değişken boyutlu dize ve sabit boyutlu dize union, bir değişken boyutlu dize gönderir.

Uyumluluk düzey 90'ı çalıştırmak için , bir değişken boyutlu türü ve bir sabit boyut türü, bir sendikaya kaynaklanan türüne bağlı olan tüm konumları (dizinler, sorgular ve hesaplanan sütunlar) düzeltmeniz gerekir.

Low

0XFFFF karakter içeren bir nesne adları geçerli tanımlayıcılardır.

0XFFFF karakter içeren bir nesne adları, geçerli bir tanımlayıcı değildir ve erişilemiyor.

Uyumluluk düzey 90'ı çalıştırmak için , bu karakteri içeren nesneleri yeniden adlandırmalısınız.

Low

SELECT ISNUMERIC içinde ('<string>'), virgül içinde katıştırılmış <string> önemli.

Örneğin, aşağıdaki SELECT ISNUMERIC('121212,12') Sorgu 0 döndürür. Bu belirten dize 121212,12 sayısal değil.

SELECT ISNUMERIC içinde ('<string>'), virgül içinde katıştırılmış <string> göz ardı edilir.

Örneğin, aşağıdaki SELECT ISNUMERIC('121212,12') Sorgu 1 döndürür. Bu belirten dize 121212,12 sayısalsa.

Low

Iki nokta üst üste (:), ayrılmış bir anahtar sözcük izleyen bir Transact-SQL deyim göz ardı edilir.

Iki nokta üst üste (:), ayrılmış bir anahtar sözcük izleyen bir Transact-SQL Deyim, deyimin başarısız olmasına neden olur.

Low

Bir GROUP BY yan tümcesinde bir alt sorgu başvurular dış sorgudan sütun başarılı olur.

Dış sorgudan bir sütuna başvuruyor bir alt sorgunun, GROUP BY yan tümce, SQL standardına göre bir hata döndürür.

Low

Alt uyumluluk düzeyleri ve Düzey 100 arasındaki farklar

Bu bölümde uyumluluk düzey (100) ile sunulan yeni bir davranış açıklanır.

90, Alt veya uyumluluk düzey ayarı

100 Uyumluluk düzey ayarı

Olası etkileri

Oturum düzey ayarı ne olursa olsun oluşturulduklarında QUOTED_IDENTIFER ayarı her zaman çoklu deyimli tablo değerli işlevler için ON olarak küme.

tırnak işaretli tanımlayıcı oturum ayarı, çoklu deyimli tablo değerli işlevler oluşturulduğunda ödenen.

Medium

Oluşturduğunuzda veya değiştiren bir bölümleme işlevi, datetime ve smalldatetime harfleri işlevinde US_English dil ayarı olarak varsayarak değerlendirilir.

Geçerli dil ayarı değerlendirmek için kullanılır datetime ve smalldatetime Bölüm fonksiyonunda hazır.

Medium

FOR BROWSE yan tümce izin (ihmal Ekle ve SELECT INTO deyimlerinde ve).

FOR BROWSE yan tümce Ekle ve SELECT INTO deyimlerinde izin verilmez.

Medium

Tam metin yüklemler ÇıKTıDA izin verilen yan tümce.

ÇıKTıDA tam metin yüklemler izin yan tümce.

Low

CREATE FULLTEXT STOPLIST, FULLTEXT STOPLIST DROP ve ALTER FULLTEXT STOPLIST desteklenmez.Sistem stoplist yeni tam metin dizinleriyle otomatik olarak ilişkilendirilmiştir.

CREATE FULLTEXT STOPLIST, FULLTEXT STOPLIST DROP ve ALTER FULLTEXT STOPLIST desteklenir.

Low

BIRLEŞTIRME, ayrılmış bir anahtar sözcük olarak zorlanmaz.

BIRLEŞTIRME tam olarak ayrılmış bir anahtar sözcük ' dir.BIRLEŞTIRME deyim, 100 ve 90 uyumluluk düzeyleri altında desteklenir.

Low

Kullanarak <dml_table_source> INSERT deyim bağımsız değişkeni bir sözdizim hatası yükseltir.

sonuçlar bir OUTPUT yakalayabilir yan tümce iç içe geçmiş bir INSERT, UPDATE, DELETE, veya deyim BIRLEŞTIRMEK ve bu sonuçlar hedef tablo veya Görünüm yerleştirin.Bu kullanarak <dml_table_source> INSERT deyim bağımsız değişkeni.

Low

NOINDEX belirtilmediyse, tek bir tablo veya dizinli görünüm ve tüm alt kümelenmemiş fiziksel ve mantıksal tutarlılık denetimleri hem de XML dizinler DBCC CHECKDB veya DBCC CHECKTABLE gerçekleştirir.Kayma dizinleri desteklemiyor.

NOINDEX belirtilmediyse, DBCC CHECKDB veya DBCC CHECKTABLE iki fiziksel ve mantıksal tutarlılık tek bir tablo ve tüm kümelenmemiş dizin denetler.Ancak, XML dizinler, kayma dizinleri ve dizin oluşturulmuş görünümler, varsayılan olarak yalnızca fiziksel tutarlılık denetimleri gerçekleştirilmez.

WITH EXTENDED_LOGICAL_CHECKS belirtilirse, dizin oluşturulmuş görünümler, XML dizinleri ve kayma dizinler mantıksal bir denetimleri gerçekleştirilmez, burada sunar.Varsayılan olarak, fiziksel tutarlılık denetimleri önce mantıksal tutarlılık denetimleri gerçekleştirilmez.NOINDEX de belirtilirse, yalnızca bir mantıksal denetimleri gerçekleştirilmez.

Low

veri işleme dili (DML) deyim ile çalışma-OUTPUT bir yan tümce kullanıldığında saat, tüm işlem sonlandırıldı ve geri deyim yürütme sırasında hata oluşuyor.

veri işleme dili (DML) deyim ile çalışma-OUTPUT bir yan tümce kullanıldığında saat davranışı küme XACT_ABORT ayarına bağlıdır, deyim yürütülmesi sırasında hata oluşur.küme XACT_ABORT KAPALı ise, ÇıKıŞ'ı kullanarak DML deyimi ile oluşturulan hata bir deyimi iptal yan tümce, deyim sonlandırılır, ancak toplu iş iş işlemin yürütme devam eder ve işlem geri alındı.küme XACT_ABORT AÇıK ise, OUTPUT yan tümcesini kullanarak DML deyim ile oluşturulan tüm çalışma zamanı hataları, toplu iş iş iş sonlandırılır ve işlem geri alındı.

Low

Ayrılmış bir anahtar, küp ve ROLLUP zorlanmaz.

küp ve ROLLUP GROUP BY yan tümce içinde ayrılmış sözcükler.

Low

XML öğelerine uygulanan sıkı doğrulama anyType TYPE.

Öğeleri için uygulanan ondan doğrulama anyType TYPE. Daha fazla bilgi için bkz:Joker karakter bileşenleri ve içerik doğrulama.

Low

Özel öznitelikleri xsi: nil and xsi: type sorgulanan olamaz veya veri işleme dili ifadeleri tarafından değiştirildi.

Bunun anlamı /e/@xsi:nil çalışırken başarısız /e/@* yok sayıyor xsi:nil ve xsi:type öznitelikleri. Ancak, /e sayı xsi:nil ve xsi:type öznitelikleri ile tutarlılığı SELECT xmlCol, bile xsi:nil = "false".

Özel öznitelikleri xsi: nil and xsi: type normal öznitelik olarak saklanır ve sorgulanan ve olması değiştirildi.

Örneğin, Sorgu Yürütülüyor SELECT x.query('a/b/@*') tüm öznitelikleri de dahil olmak üzere döndürür. xsi: nil and xsi: type.Bu tür sorguda dışlamak için , değiştirme @* With @*[namespace-uri(.) != "xsi ad uri Ekle" and not (local-name(.) = "type" veya local-name(.) ="nil".

Low

Bir XML sabit dize değerine dönüştürür kullanıcı tanımlı bir işlev bir SQL Server DateTime türü olarak deterministic işaretlendi.

Bir XML sabit dize değerine dönüştürür kullanıcı tanımlı bir işlev bir SQL Server DateTime türü olmayan-deterministic olarak işaretlendi.

Low

Tam XML union ve liste türleri desteklenmez.

Birleşim ve liste türleri aşağıdaki işlevleri de dahil olmak üzere tam olarak desteklenir:

  • Birleşim listesi

  • Birliği'union [NULL]'ın

  • Atomik türlerinin listesi

  • Birleşim listesi

Low

Yöntem bir görünüm veya satır içi tablo değerli işlev içinde bulunan, bir xQuery yöntemi için gereken küme seçenekleri doğrulanır.

Yöntem bir görünüm veya satır içi tablo değerli işlev içinde bulunan, bir xQuery yöntemi için gereken küme seçenekleri doğrulanır.küme seçenekleri yöntem hatalı olarak ayarlanmışsa, hata oluşur.

Gerekli bir seçenek ayarları hakkında daha fazla bilgi için bkz: Options (veri türü için XML) ayarlama.

Low

Satır sonu karakterler (satır başı ve satır besleme) içeren bir XML öznitelik değerleri XML standardına göre normalleştirilmiş değil.Diğer bir deyişle, her iki karakter yerine tek bir satır besleme karakteri döndürülür.

Satır sonu karakterler (satır başı ve satır besleme) içeren bir XML öznitelik değerleri XML standardına göre normalleştirilmiş.Diğer bir deyişle, dış ayrıştırılmış varlık (belge varlık dahil) tüm satır sonlarını girdi iki karakter dizisini #xD #xA hem de tek #xA karaktere göre #xA izleyen herhangi bir #xD çevirerek normalleştirilmiş.

Geri gönderilen gibi öznitelikleri için satır sonu karakterlerini içeren bir aktarım dize değerlerini kullanan uygulamalar bu karakterleri almaz.XML sayısal karakter varlıkları normalleştirme işlemi önlemek için , tüm satır sonu karakterlerini kodlamak için kullanın.

Low

Sütun özelliklerini ROWGUIDCOL ve IDENTITY yanlış bir kısıtlama olarak adlandırılabilir.Örneğin deyim CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) çalışır, ancak kısıtlama adı korunmaz ve kullanıcı tarafından erişilebilir değil.

Sütun özelliklerini ROWGUIDCOL ve IDENTITY bir kısıtlama olarak adlandırılamaz.156 Hata döndürdü.

Low

Çift yönlü bir atama gibi kullanarak sütunları güncelleştiriliyor UPDATE T1 SET @v = column_name = <expression> değişken değerinin canlı gibi WHERE ve ON yan tümcesini diğer yan tümceleri başlangıç değeri deyim yerine deyim yürütme sırasında kullanılabilir, çünkü beklenmeyen sonuçlar oluşturabilir. Bu, yüklemler, her satır için ayrı ayrı unpredictably değiştirmeye anlamları neden olabilir.

Bu davranış yalnızca uyumluluk düzey olduğunda geçerlidir küme 90.

Çift yönlü bir atama kullanarak sütun s güncelleştirme üretir beklenen sonuçları için yalnızca başlangıç değeri olarak ifade sütun deyim yürütme sırasında erişilir.

Low

Değişken atama bir üst düzey UNION içeren bir ifadede izin işleç, ancak beklenmeyen sonuçlar döndürüyor.Örneğin, aşağıdaki tablolarda, yerel değişken @v sütunun değeri atanır. EmployeeID birleşim iki tablonun. deyim birden çok değer verdiğinde, tanım olarak, döndürülen son değeri değişken atanır.Bu durumda, son değeri, ancak sonuç kümesi SELECT UNION, değişkenin doğru atanır deyim de döndürülür.

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

Değişken atama, en üst düzey bir UNION işlecini içeren bir ifadede izin verilmez.10734 Hata döndürdü.

Hatayı gidermek için , aşağıdaki örnekte gösterildiği gibi sorguyu yeniden yazın.

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

Low

ODBC işlev {fn CONVERT()} dil varsayılan tarih biçimini kullanır.Bazı diller için varsayılan biçim CONVERT() YAG'DIR biçimde, diğer işlevler {fn CURDATE()} gibi birleştirildiğinde, dönüştürme hataları oluşabilir YDM ' dir.

ODBC işlev {fn CONVERT()} Stil 121 (bir dilden bağımsız YAG'DIR biçimi) kullanır, ODBC veri dönüştürme SQL_TIMESTAMP SQL_DATE, SQL_TIME, SQLDATE, SQL_TYPE_TIME ve SQL_TYPE_TIMESTAMP türleri.

Low

ODBC işlev {fn CURDATE()}, yalnızca tarih 'YYYY-AA-GG' biçiminde döndürür.

ODBC işlev {fn CURDATE()} hem tarih hem de saat, örneğin döndürür ' YYYY-AA-GG SS: dd: ss.

Low

DateTime intrinsics DATEPART gibi dize giriş değeri geçerli bir datetime hazır olmasını gerektirmez.Örneğin, SELECT DATEPART (yıl ' 2007-30/05 ') başarıyla derler.

DateTime intrinsics DATEPART gibi dize giriş değeri geçerli bir datetime hazır olmasını gerektirir.Geçersiz bir datetime literal kullanıldığında, hata 241 döndürülür.

Low

Ayrılmış anahtar sözcükleri

Uyumluluk ayarı tarafından ayrılmış anahtar sözcükleri de belirler. Database Engine. Aşağıdaki tabloda, her uyumluluk düzeyleri tarafýndan sunulan ayrılmış anahtar sözcükleri gösterir.

Uyumluluk düzey ayarı

Ayrılmış anahtar sözcükleri

100

KÜP, BİRLEŞTİRME, TOPLAMA

90

DIŞ, ÖZET, unpivot, GERİ, tablesample

80

HARMANLA, İŞLEVİ, openxml

Belirli uyumluluk düzeyinde, tüm anahtar sözcükleri veya bu düzeyin altında sunulan ayrılmış anahtar sözcükleri içerir.Böylece, örneğin, uygulamalar için düzey 100, yukarıdaki tabloda listelenen anahtar sözcüklerin tümünü rezerve edilir.Uyumluluk düzeyleri daha düşük düzey 100 anahtar geçerli nesne adları kalır, ancak bu anahtar sözcükler için karşılık gelen düzeye 100 dil özellikleri kullanılamaz.

Tanıtılan bir kez bir anahtar sözcüğü ayrılmış olarak kalır.Örneğin, ayrılmış anahtar sözcüğü, uyumluluk düzey (80)'de kullanılmaya başlanan, OPENXML düzeyleri 90-100 ayrılmıştır.

Bir uygulama uyumluluğunu için anahtar sözcük olarak ayrılmış tanımlayıcı kullanıyorsa, düzey, uygulama başarısız olur.To work around this, enclose the identifier between either brackets ([]) or quotation marks (""); for example, to upgrade an application that uses the identifier EXTERNAL to compatibility level 90, you could change the identifier to either [EXTERNAL] or "EXTERNAL".

Daha fazla bilgi için bkz:Ayrılmış anahtar sözcükleri (Transact-SQL).

İzinler

ALTER veritabanı izni gerektirir.

Örnekler

C.Uyumluluğu değiştirme düzey

The following example changes the compatibility level of the AdventureWorks database to 90,SQL Server 2005.

ALTER DATABASE AdventureWorks
SET COMPATIBILITY_LEVEL = 90;
GO

b.Güvenlik açığının etkisini uyumluluk düzey üzerinde ORDER BY (Senaryo 1)

Aşağıdaki örnek, bağlama ORDER BY the 80 ve 100 uyumluluk düzeyleri farkı gösterir.Örnek bir örnek tablo oluşturur. SampleTable, içinde tempdb Veritabanı.

USE tempdb;
CREATE TABLE SampleTable(c1 int, c2 int);
GO

Uyumluluk düzeyi 90 ve üzeri, varsayılan düzey, aşağıdakileri SELECT... ORDER BY statement produces an error because the column alias in the AS clause, c1, is ambiguous.

SELECT c1, c2 AS c1
FROM SampleTable
ORDER BY c1;
GO

Veritabanı uyumluluk düzey için sıfırlanıyor sonra 80, aynı SELECT... ORDER BY statement succeeds.

ALTER DATABASE tempdb
SET COMPATIBILITY_LEVEL = 80;
GO
SELECT c1, c2 AS c1
FROM SampleTable
ORDER BY c1;
GO

Aşağıdaki SELECT... ORDER BY statement works in both compatibility levels because an unambiguous alias is specified in the AS clause.

ALTER DATABASE tempdb
SET COMPATIBILITY_LEVEL = 100;
GO
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO

ALTER DATABASE tempdb
SET COMPATIBILITY_LEVEL = 80;
GO
SELECT c1, c2 AS c3
FROM SampleTable
ORDER BY c1;
GO

c.Güvenlik açığının etkisini uyumluluk düzey üzerinde ORDER BY (Senaryo 2)

Uyumluluk düzeyi 90 ve üzeri, varsayılan düzey, aşağıdaki SELECT...ORDER BY ORDER BY yan tümcesinde belirlenen sütun diğer ad ad adı içerdiğinden, deyim hata üretir bir tablo öneki.

SELECT c1 AS x
FROM SampleTable
ORDER BY SampleTable.x;
GO

Veritabanı için uyumluluk düzey sıfırlandıktan sonra 80, aynı SELECT...ORDER BY deyim başarılı olur.

ALTER DATABASE tempdb
SET COMPATIBILITY_LEVEL = 80;
GO
SELECT c1 AS x
FROM SampleTable
ORDER BY SampleTable.x;
GO

Aşağıdaki SELECT...ORDER BY ORDER BY yan tümcesinde belirlenen sütun diğer ad ad adı tablosu önek kaldırıldığından deyim hem uyumluluk düzeyleri çalışır.

ALTER DATABASE tempdb
SET COMPATIBILITY_LEVEL = 100;
GO
SELECT c1 AS x
FROM SampleTable
ORDER BY x;
GO
ALTER DATABASE tempdb
SET COMPATIBILITY_LEVEL = 80;
GO
SELECT c1 AS x
FROM SampleTable
ORDER BY x;
GO

Değişiklik Geçmişi

Güncelleştirilmiş içerik

Tetikleyici içinde belirtilen XACT_ABORT deyim davranışını düzeltildi.Ayarlama için bir tetikleyici, KAPALı XACT_ABORT 80 uyumluluk düzeyi yok sayılır ve 90) ve daha yüksek uyumluluğu düzey izin verilir.Önceki belgeleri bu bilgileri ters.