Udostępnij za pośrednictwem


ZMIENIA poziom zgodności bazy danych (Transact-SQL)

Ustawia niektóre zachowania bazy danych, aby były zgodne z określonej wersja programu SQL Server. Nowe w SQL Server 2008, zastępuje następującą składnię ALTER DATABASE sp_dbcmptlevel procedury ustalania zgodności bazy danych poziom.Dla innych opcji ZMIEŃ bazę danych, zobacz ALTER DATABASE (Transact-SQL).

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

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

Argumenty

  • database_name
    Jest to nazwa bazy danych ma zostać zmodyfikowana.

  • COMPATIBILITY_LEVEL {80 | 90 | 100}
    wersja SQL Server , z którym baza danych jest dokonywane zgodny.Wartość musi być jedną z następujących czynności:

    80 = SQL Server 2000 

    90 = SQL Server 2005 

    100 = SQL Server 2008 

Uwagi

Dla wszystkich instalacji z SQL Server 2008, zgodności domyślny poziom jest 100.Bazy danych utworzone w SQL Server 2008 są zestaw do tego poziom , chyba że model bazy danych ma niższy poziomzgodności.Po uaktualnieniu bazy danych do SQL Server 2008 z dowolnej starszej wersja SQL Server, baza danych zachowuje jej zgodności istniejących poziom , jeśli jest co najmniej 80.Uaktualnianie bazy danych o zgodności poziom poniżej 80 ustawia bazy danych zgodności poziom 80.Dotyczy to bazy danych systemu i użytkownika.Aby zmienić poziom zgodności bazy danych, należy użyć ZMIEŃ bazę danych.Aby wyświetlić bieżącą zgodność poziom bazy danych, kwerendy compatibility_level kolumna w sys.databases wykazu widoku.

Za pomocą poziom zgodności ze względu na zgodność ze starszymi wersjami

poziom zgodności ma wpływ na zachowania tylko dla określonej bazy danych, a nie dla całego serwera.poziom zgodności zawiera tylko częściowe zgodność ze starszymi wersjami programu SQL Server.Za pomocą poziom zgodności jako pomoc migracji tymczasowych obejść różnice wersja zachowania, które są kontrolowane przez ustawieniepoziom zgodności odpowiednich.Jeśli istniejące SQL Server aplikacji wpływają różnice funkcjonalne w SQL Server 2008, konwertowanie do poprawnego działania aplikacji.Następnie użyj ZMIEŃ bazę danych, aby zmienić poziom zgodności do 100.Nowe ustawienie zgodności dla bazy danych staje się skuteczne po bazie dalej bieżącej (jak domyślna baza danych na logowania lub jest określony w użycia instrukcja).

Najważniejsze wskazówki

Zmiana poziom zgodności, podczas gdy użytkownicy są podłączeni do bazy danych może wygenerować niepoprawny wynik zestawy dla aktywnej kwerendy.Na przykład jeśli poziom zgodności zmienia się podczas kompilowania planu kwerend, skompilowany plan może być oparta na obu poziomów zgodności stare i nowe niepoprawne plan i potencjalnie niedokładnych wyniki.Ponadto problemu mogą być rozliczana, jeśli plan jest umieszczany w pamięci podręcznej plan i ponownie na następne kwerendy.Aby uniknąć kwerendy niedokładne wyniki, zaleca się następującą procedurę, aby zmienić poziom zgodności bazy danych:

  1. Określenia tryb pojedynczego użytkownika dostępu do bazy danych za pomocą zmienić SINGLE_USER ustawienia bazy danych.

  2. Zmień poziom zgodności bazy danych.

  3. Umieść bazę danych w trybie dostępu wielu użytkowników przy użyciu zmienić MULTI_USER ustawienia bazy danych.

  4. Aby uzyskać więcej informacji dotyczących ustawiania trybu dostępu bazy danych, zobacz ALTER DATABASE (Transact-SQL).

Ustawianie opcji

Nowe funkcje mogą działać w starszych poziomy zgodności, ale Ustaw opcje mogą wymagać korekty.Na przykład za pomocą xml Typ danych w obszarze zgodność poziom 80 wymaga odpowiednich ANSI Ustaw opcje.Gdy zgodność bazy danych poziom jest zestaw na 90 lub nowszego, ustawienie ANSI_WARNINGS on niejawnie ustawia również ARITHABORT on.Jeśli zgodność bazy danych poziom jest zestaw na 80, opcja ARITHABORT musi być jawnie zestaw na.Aby uzyskać więcej informacji, zobacz Ustaw opcje, które wpływają na wyniki.

Poziomy zgodności i procedur przechowywanych

Gdy wykonuje procedura składowana używa bieżącego zgodność poziom bazy danych, w którym jest zdefiniowana.Po zmianie ustawienia zgodności bazy danych wszystkie jego procedury przechowywane są automatycznie zwrócenie odpowiednio.

Różnice między zgodności na poziomie 90 80 i poziomu

W tej sekcji opisano nowego zachowania wprowadzone z zgodności poziom 90.

Na zgodność poziom 90 występują następujące zmiany w zachowaniu.

Ustawieniepoziom zgodności - 80

Ustawieniepoziom zgodności - 90

Możliwość uderzenia

Blokowanie wskazówki w klauzulaFROM słowo kluczowe z jest zawsze opcjonalne.

Z kilkoma wyjątkami tabela wskazówki są obsługiwane w klauzula FROM, tylko wtedy, gdy wskazówki są określane przy użyciu słowa kluczowego Z.Aby uzyskać więcej informacji, zobacz Z języka Transact-SQL).

High

* = I = * operatorów łączyć zewnętrzne są obsługiwane przez komunikat ostrzegawczy.

Podmioty te nie są obsługiwane; słowo kluczowe OUTER JOIN powinny być używane.

High

GDY powiązanie kolumna odwołuje się do kolumn zdefiniowane na liście Wybierz liście ORDER BY, niejasności kolumna są ignorowane, a kolumna prefiksy czasami są ignorowane.Może to spowodować zestaw wyników w kolejności nieoczekiwany.

Na przykład, ORDER BY klauzula z dwóch części jednej kolumna (<table_alias>.<column>), jest używany jako odwołanie do kolumna na liście wyboru zostanie przyjęte, ale tabela alias jest ignorowana.Rozważmy następującą kwerendę.

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

Podczas wykonywania prefiks kolumna jest ignorowana ORDER BY.Operacja sortowania nie występuje na określone źródło kolumna (x.c1) zgodnie z oczekiwaniami; Zamiast tego występuje na pochodne c1 kolumna zdefiniowanej w kwerendzie.Plan wykonania dla tej kwerendy pokazuje, że wartości dla kolumna pochodnej są obliczane najpierw i posortowane obliczonych wartości.

Błędy są wywoływane na niejasności kolumna .Prefiksy kolumny, jeśli nie podanych w kolejności według są ignorowane podczas powiązanie z kolumna zdefiniowane na liście Wybierz.

Rozważmy następującą kwerendę.

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

Podczas wykonywania prefiks kolumna w kolejności według klauzula nie jest ignorowana.Operacja sortowania występuje na określone źródło kolumna (x.c1) zgodnie z oczekiwaniami.Plan wykonania dla tej kwerendy pokazuje, że sortowanie operator zamówień wierszy zwracanych z t_table , a następnie wartości kolumnapochodnej c1 zdefiniowane na liście wybierz są obliczane.

Medium

WSTAW wybierz z Unii o różnych typach danych każdej gałęzi Unii jest bezpośrednio rzutować na typ miejsce docelowe kolumna WSTAW.Nawet wtedy, gdy Unia używany przez samego siebie może nie działać z powodu konwersje typów niezgodne, wybierz WSTAW dzięki sukcesu Unii, ponieważ gałąź, typ wyników Unii nigdy nie zostanie przekonwertowany.

Typ wyniku Unii wywodzi się niezależnie od tego, WSTAW zaznacz.Każdy oddział Unii rzutować typu wyniku Unii, a następnie oddać do miejsce docelowetypukolumna WSTAW. Jeśli istnieją niezgodne typy w Unii, pierwszy oddanych może spowodować błąd.Aby uruchomić zgodność poziom 90, musisz naprawić wszystkie związki niezgodny typ używany wewnątrz WSTAW zaznacz.

Medium

Wstawianie i aktualizacja operacje, korzystając z widoku niepoprawnie są obsługiwane w widokach, określające z opcji Sprawdź klauzula , gdy widok lub odwołanie korzysta z klauzulaTOP.

Wstawianie i aktualizacja widoków, które korzysta z opcji Sprawdź, czy podczas widok lub odwołanie korzysta z klauzulaTOP nie są obsługiwane operacje, korzystając z widoku.

Medium

Unii o zmiennej długości kolumna i stałej długości kolumna daje o stałej długości kolumna.

Unii o zmiennej długości kolumna i stałej długości kolumna daje o zmiennej długości kolumna.

Medium

SET XACT_ABORT OFF jest dozwolona wewnątrz wyzwalacza.

SET XACT_ABORT OFF jest niedozwolona wewnątrz wyzwalacza.

Medium

DO PRZEGLĄDANIA klauzula jest dozwolony (i ignorowane) w widokach.

DO PRZEGLĄDANIA klauzula nie jest dozwolone w widokach.

Medium

Błędy domeny nie są kontrolowane przez ANSI_WARNINGS.ARITHABORT ustawienia są honorowane ANSI_WARNINGS jest zestaw na wyłączone i nie ma żadnej zmiany do ARITHABORT.

Błędy domeny również są kontrolowane przez ANSI_WARNINGS i są błędy 16 ważności.Jeśli ANSI_WARNINGS lub ARITHABORT na, zostanie zgłoszony błąd zamiast zwracać wartość NULL.Skrypty użytkowników, zależnych od ARITHABORT jest zestaw na wyłączone może być przerwane przez tę zmianę.

Medium

Jeśli kwerenda passthrough przeciwko dane zdalne źródło [OpenRowset lub OtwórzKwerendę] zawiera kolumny o takich samych nazwach, nazwy zduplikowane kolumna są ignorowane, chyba że wyraźnie noszą nazwy kolumn w kwerendzie.

Jeśli kwerenda passthrough przeciwko dane zdalne źródło [OpenRowset lub OtwórzKwerendę] daje kolumna z kolumna zduplikowane nazwy, błąd zostanie zaokrąglona.

Low

Stałe ciąg znaków i varbinary stałych o rozmiarze większym niż 8000 są traktowane jako text, ntext, lub image.

Stałe ciąg znaków i varbinary stałych o rozmiarze większym niż 8000 są traktowane jako typ varchar(max) (lub nvarchar(max) i varbinary(max), odpowiednio).To zmianę typu danych tabela , utworzony za pomocą SELECT... DO, jeśli lista wyboru zawiera takie wyrażenia.

Low

Porównania między typy liczbowe (smallint, tinyint, int, bigint, numeric, decimal, smallmoney, money), są wykonywane przez konwertowanie comparand o niższym priorytecie w hierarchii typu dla typu, którego priorytet jest wyższy.

Wartości typu numeric są porównywane bez konwersji.Zapewnia lepszą wydajność.To jednak powodować pewne zmiany w zachowaniu, szczególnie w przypadkach, w których konwersji spowodowała przepełnienie wyjątki.

Low

Funkcje wbudowane metadane , które podjąć argumentów w ciąg obciąć ich wprowadzania, jeśli dane wejściowe jest dłuższa niż 4000 znaków.

Funkcje wbudowane metadane podnieść błąd obcinania spowodowałyby utratę nonspace znaków.

Low

zestaw znaków niedozwolonych w nie ujęty w cudzysłów identyfikator pozostaje niezmieniony.

Transact-SQL Analizator składni obsługuje standard Unicode 3.2, które zmiany klasyfikacji znaków dla niektórych znaków międzynarodowych, które obecnie są niedozwolone w nondelimited identyfikatorów.

Low

Ustaw na ANSI_WARNINGS nie zastępuje ustawienie SET ARITHABORT OFF, w przypadek ruchomy punkt błędy domena [oznacza to, że ujemne argumenty funkcjalog()].Jeśli ANSI_WARNINGS jest włączone, ale ARITHABORT jest wyłączona, ruchomy punkt domena błędy nie powodują kwerenda ma być zakończony.

Ustaw na ANSI_WARNINGS całkowicie zastępuje ustawienie ARITHABORT OFF.Szybująca punkt domena błędy w tym przypadek spowoduje, że kwerenda ma być zakończony.

Low

Stałe niebędących liczbami całkowitymi są dozwolone (i ignorowane) w kolejności według klauzula.

Stałe niebędących liczbami całkowitymi są niedozwolone w kolejności według klauzula.

Low

Dozwolone jest pusty zestaw instrukcja (z zestawu opcji przydziałów).

Pusty zestaw klauzula jest niedozwolone.

Low

TOŻSAMOŚĆ atrybut nie pochodzi poprawnie produkowane przez pochodnej tabelakolumn.

TOŻSAMOŚĆ atrybut wywodzi się poprawnie dla kolumn produkowane przez pochodne tabel.

Low

opcje dopuszczania wartości nullwłaściwość operatory arytmetyczne nad ruchomy punkt danych typu jest zawsze nullable.

opcje dopuszczania wartości nullwłaściwość operatorów arytmetycznych nad ruchomy punkt zmiany typu danych na nonnullable przypadek , gdy dane wejściowe są nonnullable i ANSI_WARNINGS jest włączone.

Low

Wstaw...Zaznacz instrukcja Unii, typów wytwarzanego przez poszczególnych wyników, jakie zestawy są konwertowane na typ obiekt docelowy wyników.

Wstaw...Określona instrukcja SELECT z Unii, dominującej typu różnych gałęzi, a wyniki są konwertowane na tego typu przed przekonwertowaniem na typtabela obiekt docelowy.

Low

W polu Wybierz...XML instrukcja, hex(27) ( ' znaków) i hex(22) ( " znak) są zawsze entitized, nawet w przypadku, gdy nie jest wymagane.

XML entitizes hex(27) i hex(22) tylko wtedy, gdy jest to wymagane.Nie są one entitized w następujących sytuacjach:

  • atrybut zawartości hex(27) ( ' znaków) nie jest entitized, jeśli wartości atrybut są rozdzielane z "i hex(22) ( " znaków) nie jest entitized, jeśli wartości atrybut są rozdzielane z '.

  • W zawartości elementu hex(27) i hex(22) nigdy nie są entitized.

Low

W formacie XML na wartość sygnatury czasowej jest mapowany na liczbę całkowitą.

W formacie XML na wartość sygnatury czasowej jest mapowany na wartość binarna.

Aby uzyskać więcej informacji, zobacz OBSŁUGĘ XML sygnatury czasowej, typ danych.

Wysoki (Jeśli timestamp kolumna jest używana); w przeciwnym razie niski

DLA XML i OPENXML wysokiejzakres znaków Unicode (3 bajtów) w nazwach są reprezentowane na pozycji 8.

Na przykład przy użyciu pozycji 8, XML dla reprezentuje Unicode punkt kodowy U+10000 jako:

<a_x00010000_ c1="1" />

DLA XML i OPENXML wysokiejzakres znaków Unicode (3 bajtów) w nazwach są reprezentowane na pozycji 6.

Na przykład przy użyciu pozycji 6, XML dla reprezentuje Unicode punkt kodowy U+10000 jako:

<a_x010000_ c1="1" />

Low

W formacie XML dla mapowania tabela pochodnej w trybie AUTOMATYCZNYM są traktowane przezroczysty.

Na przykład:

USE AdventureWorks2008R2;
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;

Gdy poziom zgodności dla AdventureWorks2008R2 jest zestaw na 80 powyższy przykład produkuje:

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

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

W XML dla mapowania tabela pochodnej w trybie AUTOMATYCZNYM są traktowane w sposób nieprzezroczysty.

Gdy poziom zgodności dla AdventureWorks2008R2 jest zestaw na 90 poprzedni przykład tworzy:

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

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

Wysoki (Jeśli tryb dla automatycznego XML stosuje się w widokach); w przeciwnym razie niski

Ciąg money Konwersje obsługuje używanie znaku kreski ułamkowej odwróconej (\) jako symbol waluty, tylko w języku japońskim i koreańskim.

Akceptowana znaku kreski ułamkowej odwróconej (\) we wszystkich ciąg money konwersji wszystkich języków.ISNUMERIC zwróci wartość true kiedy \ jest używana jako symbol waluty.

Dla baz danych w wersjach SQL Server starsze niż SQL Server 2005, to nowe zachowanie podziałów indeksy i kolumny obliczane, które zależą ISNUMERIC zwracają wartość, która zawiera \ i język jest japoński ani koreański.

Low

Wynik arytmetyczny operator jest zawsze nullable, nawet jeśli argumenty nie dopuszczającej i ANSI_WARNINGS lub ARITHABORT jest zestaw na.

Gdy ANSI_WARNINGS lub ARITHABORT są zestaw na wynik zmiennoprzecinkową arytmetyczny punkt operator jest nonnullable, jeśli oba operandy są nonnullable.

Ta zmiana w opcje dopuszczania wartości null może spowodować awarię podczas bcp jest używany do eksport zbiorczy danych, który korzysta z formatu binarnego z SQL Server 2000 tabela obliczanej kolumna używający zmiennoprzecinkową z pkt operator arytmetyczny i bcp lub WSTAWIĆ luzem jest następnie używana import zbiorczy danych do SQL Server 2005 tabela o tej samej definicji.

UwagaUwaga:
Gdy obie opcje są wyłączone, Aparat baz danych oznacza wynik w postaci nullable.Jest to taki sam jak w SQL Server 2000.

Low

funkcje wbudowane podjąć nvarchar jako parametr, jeśli podana wartość jest varchar, wartość jest konwertowany na nvarchar(4000).W SQL Server 2000, jeżeli nie przekazano większą wartość, dyskretnie jest obcinana.

funkcje wbudowane podjąć nvarchar jako parametr, jeśli podana wartość jest varchar, wartość nadal jest konwertowany na nvarchar(4000).Jednakże, jeżeli nie przekazano większą wartość, SQL Server 2008 generuje błąd.

Aby uruchomić zgodność poziom 90, musisz naprawić niestandardowy kod, który opiera się na zachowanie obcinania.

Low

Unia o stałej długości (char, binary, lub nchar) ciąg o zmiennej długości (varchar, varbinary, nvarchar) zwraca ciąg wyniku o stałej długości.

Unii zmiennym rozmiarze ciąg i stałym rozmiarze ciąg zwraca rozmiar zmiennej ciąg.

Aby uruchomić zgodność poziom 90, musisz naprawić wszystkie miejsca (indeksy, kwerend i kolumny obliczane), które zależą od typu wynikające z Unii typu zmiennej rozmiar i typ stałym rozmiarze.

Low

Nazwy obiektów zawierających znak 0xFFFF są prawidłowymi identyfikatorami.

Nazwy zawierające znak 0xFFFF nie są prawidłowymi identyfikatorami i nie można uzyskać dostępu do obiektów.

Aby uruchomić zgodność poziom 90, należy zmienić nazwę obiekty, które zawierają ten znak.

Low

W ISNUMERIC('<string>') zaznacz osadzony przecinkami w <string> są znaczące.

Na przykład, następujący SELECT ISNUMERIC('121212,12') kwerenda zwraca wartość 0.Wskazuje, że ciąg 121212,12 jest numerycznym.

W ISNUMERIC('<string>') zaznacz osadzony przecinkami w <string> są ignorowane.

Na przykład, następujący SELECT ISNUMERIC('121212,12') kwerenda zwraca wartość 1.To wskazuje, że ciąg 121212,12 jest numerycznym.

Low

Dwukropek (:) od zastrzeżonych słów kluczowych w Transact-SQL instrukcja jest ignorowana.

Dwukropek (:) od zastrzeżonych słów kluczowych w Transact-SQL instrukcja powoduje, że instrukcja nie powiedzie się.

Low

Grupuj według klauzula odwołuje się kolumna z kwerendy zewnętrzne podzapytanie powiedzie się.

Grupuj według klauzula odwołuje się kolumna z kwerendy zewnętrzne podzapytanie zwraca błąd na SQL standard.

Low

Różnice między niższe poziomy zgodności i poziom 100

W tej sekcji opisano nowego zachowania wprowadzone z zgodności poziom 100.

Zgodnośćpoziom ustawieniem 90 lub niższy

Ustawieniepoziom zgodności - 100

Możliwość uderzenia

Ustawienie QUOTED_IDENTIFER jest zawsze zestaw na tabelazostanie-wycenione funkcje, kiedy są tworzone niezależnie od ustawieniapoziom sesja.

Ustawienie NOTOWANE identyfikator sesja jest honorowane, gdy zostanie tabela-funkcje wyceniane są tworzone.

Medium

Podczas tworzenia lub zmiany partycji funkcja datetime i smalldatetime literały funkcja są oceniane, przy założeniu, że US_English jako ustawienia języka.

Bieżące ustawienie języka jest używany do oceny datetime i smalldatetime literały w partycji funkcja.

Medium

DO PRZEGLĄDANIA klauzula jest dozwolony (i ignorowane) w instrukcji INSERT i SELECT INTO.

DO PRZEGLĄDANIA klauzula nie jest dozwolone w instrukcji INSERT i SELECT INTO.

Medium

Predykaty pełnego tekstu są dozwolone w danych wyjściowych klauzula.

Predykaty pełnego tekstu nie są dozwolone w danych wyjściowych klauzula.

Low

Tworzenie STOPLIST PEŁNOTEKSTOWY, zmieniać PEŁNOTEKSTOWY STOPLIST i UPUŚĆ PEŁNOTEKSTOWY STOPLIST nie są obsługiwane.System stoplist jest automatycznie kojarzona z nowe indeksy pełnotekstowe.

Tworzenie STOPLIST PEŁNOTEKSTOWY, zmieniać PEŁNOTEKSTOWY STOPLIST i UPUŚĆ PEŁNOTEKSTOWY STOPLIST są obsługiwane.

Low

Korespondencji seryjnej nie jest wymuszana jako zarezerwowane słowo kluczowe.

Korespondencji seryjnej jest całkowicie zarezerwowanym słowem kluczowym.Scalanie instrukcja jest obsługiwana w poziomy zgodności 90 i 100.

Low

Za pomocą <dml_table_source> argumentu instrukcja INSERT podnosi błąd składni.

Przechwytywanie wyniki wyjściowych klauzula w zagnieżdżonych DELETE INSERT, UPDATE lub SCALIĆ instrukcjai włóż tych wyniki do miejsce docelowe tabela lub widoku.Można to zrobić za pomocą <dml_table_source> argumentu instrukcjaINSERT.

Low

Określono NOINDEX DBCC CHECKDB lub DBCC CHECKTABLE wykonuje sprawdzania spójności fizycznej i logicznej na pojedynczej tabela lub indeksowany widok i wszystkie jego nieklastrowany i indeksy XML.Przestrzennej indeksy nie są obsługiwane.

Określono NOINDEX DBCC CHECKDB lub DBCC CHECKTABLE wykonuje obie kontrole fizyczne i logiczne spójności na pojedynczej tabela i wszystkich jego zbudowania indeksów nie klastrowanych.Jednak indeksy XML, indeksy przestrzenne i widoki indeksowane tylko fizyczny spójności są sprawdzane domyślnie.

Jeśli określono Z EXTENDED_LOGICAL_CHECKS logiczne są sprawdzane na widoki indeksowane, indeksy XML i indeksów przestrzennych, w przypadku gdy przedstawienia.Domyślnie spójność fizycznych są sprawdzane przed sprawdzania spójności logicznych.Jeśli określony jest również NOINDEX, wykonywane są tylko kontrole logiczne.

Low

Gdy wyjściowy klauzula jest używany z instrukcja język edycji danych (DML) i błąd czasu wykonania występuje podczas wykonywania instrukcja , cała transakcja jest zakończone i przywracana.

Gdy wyjściowy klauzula jest używany z instrukcja język edycji danych (DML) i błąd czasu wykonania odbywa się podczas wykonywania instrukcja zachowanie zależy od ustawienia zestawu XACT_ABORT.Ustaw XACT_ABORT jest wyłączona, błąd przerwania instrukcja generowanych przez DML instrukcja przy użyciu danych wyjściowych klauzula zakończy instrukcja, ale kontynuuje wykonywanie partia i transakcji nie jest przywracany.Jeśli ustawienie XACT_ABORT jest włączone,czas zakończy partiai transakcja jest cofana.

Low

Moduł i pakiet zbiorczy aktualizacji nie są wymuszane jako zastrzeżonych słów kluczowych.

Moduł i pakiet zbiorczy aktualizacji są zarezerwowanymi słowami kluczowymi w obrębie grupy przez klauzula.

Low

Ścisłe sprawdzanie poprawności zostanie zastosowany do elementów XML anyType typu.

Lax sprawdzania poprawności jest stosowany do elementów anyType typu.Aby uzyskać więcej informacji, zobacz Symbol wieloznaczny składników i poprawności zawartości.

Low

Atrybuty specjalne xsi: nil i xsi: type nie można zbadać lub zmodyfikowane przez instrukcji język edycji danych .

Oznacza to, że /e/@xsi:nil kończy się niepowodzeniem podczas /e/@* ignoruje xsi:nil i xsi:type atrybuty.Jednakże /e zwraca xsi:nil i xsi:type atrybuty spójności z SELECT xmlCol, nawet jeśli xsi:nil = "false".

Atrybuty specjalne xsi: nil i xsi: type są przechowywane jako zwykły atrybuty i można zbadać i modyfikacji.

Na przykład, wykonywanie kwerendy SELECT x.query('a/b/@*') zwraca wszystkie atrybuty, łącznie z xsi: nil i xsi: type.Aby wykluczyć te typy w kwerendzie, należy zastąpić @* z @*[namespace-uri(.) != "wstawić identyfikator uri obszaru nazw xsi" i nie (local-name(.) = "type" lub local-name(.) ="nil".

Low

Zdefiniowana przez użytkownika funkcja konwertująca staławartośćciąg XML do SQL Server typu datetime jest oznaczony jako deterministyczny.

Zdefiniowana przez użytkownika funkcja konwertująca staławartośćciąg XML do SQL Server typu datetime jest oznaczony jako nie deterministyczny.

Low

Typy Unii i listy XML nie są w pełni obsługiwane.

Typy Unii i listy są w pełni obsługiwane w tym następujące funkcje:

  • Unia listy

  • Unia Unii

  • Lista typów niepodzielny

  • Lista Unii

Low

Ustaw opcje wymagane dla xQuery metoda nie jest sprawdzana poprawność metoda znajdujące się w widoku lub wewnętrznej tabela-wycenione funkcja.

Ustaw opcje wymagane dla xQuery metoda sprawdzania poprawności, gdy metoda jest zawarte w widoku lub wewnętrznej tabela-wycenione funkcja.Błąd jest uruchamiany, jeśli Ustawianie opcji metoda są zestaw niepoprawnie.

Aby uzyskać więcej informacji o ustawieniach wymaganej opcji, zobacz Ustawianie opcji (typ danych XML).

Low

Wartości atrybut XML, które zawierają znaki końca wiersza (powrotu karetki i wysuwu wiersza) nie są znormalizowane zgodnie ze standardem XML.Oznacza to, że oba znaki są zwracane zamiast pojedynczego znaku wysuwu wiersza.

Zgodnie ze standardem XML są znormalizowane wartości atrybut XML, które zawierają znaki końca wiersza (powrotu karetki i wysuwu wiersza).Oznacza to, że wszystkie podziały wiersza w zewnętrznych tożsamościach zanalizowano (w tym dokumencie obiekt) są znormalizowane na wejściu tłumacząc sekwencję znaków dwóch #xA #xD i wszelkich #xD, którym nie następuje #xA #xA pojedynczy znak.

Aplikacje, które korzystają z atrybutów do transportu wartości ciąg , które zawierają znaki końca wiersza nie będzie otrzymywać tych znaków, ponownie, gdy są one przedkładane.Aby uniknąć proces normalizacji, użyj encje znaków numerycznych XML do kodowania wszystkie znaki końca wiersza.

Low

Właściwości kolumna ROWGUIDCOL i tożsamość nazwą może być niepoprawnie jako ograniczenia.Na przykład instrukcja CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) wykonuje, ale nazwa ograniczenia nie są zachowywane i nie jest dostępny dla użytkownika.

Nie mogą być nazwane właściwości kolumna ROWGUIDCOL i tożsamość jako ograniczenia.Zwracany jest błąd 156.

Low

Aktualizowanie kolumn przy użyciu przypisania dwukierunkowe, takich jak UPDATE T1 SET @v = column_name = <expression> może wygenerować nieoczekiwane wyniki , ponieważ żywe wartość zmiennej mogą być używane w innych klauzul WHERE i w klauzula podczas wykonywania instrukcja zamiast instrukcja od wartości.Może to spowodować znaczenie predykatów, aby zmienić sposób nieprzewidywalny, na podstawie na wiersz.

Takie zachowanie ma zastosowanie tylko wtedy, gdy poziom zgodności jest zestaw na 90.

Aktualizowania kolumn przy użyciu przypisania dwukierunkowe daje oczekiwanych wyniki , ponieważ tylko w instrukcja początkowa wartość kolumna jest dostępny podczas wykonywania instrukcja .

Low

Przypisanie zmiennej jest dozwolone w instrukcja zawierającą górnypoziom operatorUNION, ale zwraca nieoczekiwane wyniki.Na przykład, w następujących instrukcji zmienna lokalna @v jest przypisywana wartość kolumna EmployeeID z Unii dwóch tabel.Z definicji gdy instrukcja SELECT zwraca więcej niż jedną wartość zmiennej jest przypisany ostatnią wartość zwracana.W tym przypadekzmienna jest poprawnie przypisany ostatniej wartości, jednak zestaw wyników Unii wybierz instrukcja jest również zwracana.

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

Przypisanie zmiennej nie jest dozwolone w instrukcja zawierającą górnypoziom UNION operator.Zwracany jest błąd 10734.

Aby rozwiązać problem, nowa napisać kwerendę, jak pokazano w poniższym przykładzie.

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 funkcja {fn CONVERT()} używa domyślnego formatu data języka.W przypadku niektórych języków formatem domyślnym jest YDM, co może spowodować błędy konwersji CONVERT() w połączeniu z innych funkcji, takich jak {fn CURDATE()}, które oczekują, że YMD format.

ODBC funkcja {fn CONVERT()} używa stylu 121 (format YMD niezależny od języka) podczas konwertowania danych ODBC typy, SQL_TIMESTAMP, SQL_DATE, SQL_TIME, SQLDATE, SQL_TYPE_TIME i SQL_TYPE_TIMESTAMP.

Low

ODBC funkcja {fn CURDATE()} zwraca tylko data w formacie "RRRR-MM-DD".

ODBC funkcja {fn CURDATE()} zwraca data i czas, na przykład "RRRR-MM-DD: mm: ss.

Low

Intrinsics DateTime, takich jak DATEPART nie wymagają ciąg wartości wejściowych jest prawidłowy element datetime literałów.Na przykład wybierz DATEPART (rok, ' 05-2007-30 ") kompiluje pomyślnie.

Intrinsics DateTime, takich jak DATEPART wymagają ciąg wartości wejściowych jest prawidłowy element datetime literałów.Gdy używany jest nieprawidłowa data/godzina literału, zwracany jest błąd 241.

Low

Zastrzeżone słowa kluczowe

Ustawienie zgodność określa również słowa kluczowe, które są zastrzeżone przez Aparat baz danych.W poniższej tabela przedstawiono zastrzeżonych słów kluczowych, które są wprowadzone przez każdego z poziomów zgodności.

Ustawieniepoziom zgodności-

Zastrzeżonych słów kluczowych

100

MODUŁ KORESPONDENCJI SERYJNEJ, PAKIET ZBIORCZY

90

ZEWNĘTRZNE PRZESTAWNE, UNPIVOT, PRZYWRÓCIĆ, TABLESAMPLE

80

SORTOWANIE, OPENXML, FUNKCJA

Na zgodność danego poziomzastrzeżonych słów kluczowych zawierają wszystkie słowa kluczowe wprowadzone na poziomie lub poniżej tego poziom.W związku z tym wystąpienieaplikacji na poziom 100, wszystkich słów kluczowych wymienionych w powyższej tabela są zastrzeżone.Na niższych poziomach zgodności poziom-100 słów kluczowych pozostają prawidłowego obiektu nazw, ale poziom-100 funkcji języka odpowiadającej te słowa kluczowe są niedostępne.

Po wprowadzenia, słowa kluczowego pozostaje zarezerwowana.Na przykład zarezerwowane słowo kluczowe OPENXML, który został wprowadzony w zgodności poziom 80, jest również zastrzeżona w poziomach 90 i 100.

Jeśli aplikacja używa identyfikator, który jest zarezerwowany jako słowo kluczowe poziomzgodności, aplikacja nie powiedzie się.Aby obejść ten problem, należy ująć identyfikator między nawiasy kwadratowe ([]) lub cudzysłów (" "); na przykład w Aby uaktualnić aplikację, która używa identyfikatora zewnętrznego zgodność poziom 90, może zmienić identyfikatora, albo [zewnętrznej] lub "ZEWNĘTRZNĄ".

Aby uzyskać więcej informacji, zobacz Zarezerwowane słowa kluczowe (Transact-SQL).

Uprawnienia

Wymaga zmiany uprawnień w bazie danych.

Przykłady

A.Zmiana poziomzgodności

Poniższy przykład przedstawia zmianę poziom zgodności z AdventureWorks2008R2 bazy danych do 90, SQL Server 2005.

ALTER DATABASE AdventureWorks2008R2
SET COMPATIBILITY_LEVEL = 90;
GO

B.Wpływ poziom zgodności na ORDER BY (scenariusz 1)

Poniższy przykład ilustruje różnicę w kolejności przez powiązanie poziomy zgodności 80 i 100.W przykładzie zostanie utworzony przykładowej tabela SampleTable, tempdb bazy danych.

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

W zgodności poziom 90 i wyższych, domyślny poziom, poniżej SELECT... ORDER BY instrukcja generuje błąd, ponieważ kolumna alias w AS klauzula c1, jest niejednoznaczny.

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

Po przywróceniu bazy danych do zgodności poziom80, tym samym SELECT... ORDER BYpowiedzie sięinstrukcja .

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

Następujące SELECT... ORDER BY instrukcja działa w obu poziomów zgodności, ponieważ jednoznaczne alias jest określony w klauzulaAS.

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.Wpływ poziom zgodności na ORDER BY (scenariusz 2)

W zgodności poziom 90 i wyższych, domyślny poziom, poniżej SELECT...ORDER BYinstrukcja generuje błąd ponieważalias kolumna, określona w kolejności według klauzula zawiera prefiks tabela .

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

Po bazy danych jest resetowany do zgodności poziom80, tym samym SELECT...ORDER BYpowiedzie sięinstrukcja .

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

Następujące SELECT...ORDER BY instrukcja działa w obu poziomów zgodności, ponieważ prefiks tabela jest usuwana z kolumna alias określonego w kolejności według klauzula.

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