ALTER DATABASE poziom zgodności (języka Transact-SQL)

Ustawia niektóre zachowania bazy danych w celu zachowania zgodności z określonej wersja programu SQL Server. Nowe w SQL Server 2008, zastępuje następującą składnię instrukcji ALTER DATABASE sp_dbcmptlevel procedurę ustawiania poziom zgodności bazy danych.Zobacz inne opcje instrukcji ALTER DATABASE ALTER DATABASE języka Transact-SQL).

Topic link iconKonwencje składni języka Transact-SQL

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

Argumenty

  • database_name
    Jest nazwą bazy danych, które zostaną zmodyfikowane.

  • COMPATIBILITY_LEVEL {80 | 90 | 100}
    Jest to 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

Remarks

W przypadku wszystkich instalacji programu SQL Server 2008, poziom zgodności domyślną jest 100. Baz danych utworzonych w SQL Server 2008 są ustawione na tym poziomie, chyba że baza danych modelu ma niższy poziom zgodności. Po uaktualnieniu bazy danych SQL Server 2008 z dowolnej starszej wersja SQL Server, w bazie danych zachowuje jego istniejącą poziom zgodności, jeśli jest co najmniej 80. Uaktualnianie bazy danych o poziom zgodności poniżej 80 ustawia poziom zgodności 80 w bazie danych.Dotyczy to zarówno systemu i użytkownika bazy danych.Aby zmienić poziom zgodności bazy danych, należy użyć instrukcji ALTER DATABASE.Aby wyświetlić bieżący poziom zgodności bazy danych, kwerendy compatibility_level kolumna w widoku sys.databases wykazu.

Przy użyciu poziom zgodności zgodność z poprzednimi wersjami

Poziom zgodności ma wpływ na zachowanie tylko dla określonej bazy danych, a nie dla całego serwera.Poziom zgodności zapewnia tylko częściowe zgodność ze starszymi wersjami programu SQL Server. W celu obejścia różnice wersja zachowania, które są kontrolowane przez odpowiednie ustawienie poziom zgodności, należy zastosować poziom zgodności jako pomoc migracji tymczasowych.Jeśli istniejące SQL Server aplikacje dotyczy behawioralnej różnice SQL Server 2008, Konwertuj do poprawnego działania aplikacji. Następnie użyj instrukcji ALTER DATABASE, aby zmienić poziom zgodności do 100.Nowe ustawienia zgodności dla bazy danych zostaje uaktywniona po bazy danych jest następny bieżącej (jako domyślna baza danych na logowania lub jest określona w instrukcja USE).

Najważniejsze wskazówki

Zmiana poziom zgodności, podczas gdy użytkownicy są podłączeni do bazy danych może spowodować nieprawidłowe wyniki 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 zgodności stare i nowe poziomy, planu, który jest niepoprawna i potencjalnie niedokładne wyniki.Ponadto problemu mogą być wytworzone dających, jeśli plan jest umieszczany w pamięci podręcznej plan i ponownie wykorzystywane na następne kwerendy.Aby uniknąć wyniki kwerendy niedokładne, zaleca się następującą procedurę, aby zmienić poziom zgodności bazy danych:

  1. Ustaw bazy danych do trybu dostępu do jednego użytkownika przy użyciu instrukcji ALTER DATABASE SINGLE_USER zestaw.

  2. Należy zmienić poziom zgodności bazy danych.

  3. Umieścić bazę danych w trybie wielodostępnym dostępu przy użyciu instrukcji ALTER DATABASE MULTI_USER zestaw.

  4. Aby uzyskać więcej informacji na temat ustawiania trybu dostępu bazy danych zobacz ALTER DATABASE języka Transact-SQL).

Opcje zestaw

Nowe funkcje mogą działać w starszych poziomy zgodności, ale opcji zestaw może wymagać korekty.Na przykład przy użyciu xml Typ danych w obszarze poziom zgodności 80 wymaga odpowiednich opcji ANSI zestaw. Ponadto, gdy poziom zgodności bazy danych jest zestaw do 90 lub nowszej, zestaw ting ANSI_WARNINGS do ON niejawnie zestaw s ARITHABORT on.Jeśli poziom zgodności bazy danych jest ustawiony na wartość 80, opcja ARITHABORT musi jawnie ustawiona na ON.Aby uzyskać więcej informacji zobaczSET Options That Affect Results.

Poziomy zgodności i procedur przechowywanych

Gdy wykonuje procedura przechowywana, wykorzystuje bieżący poziom zgodności bazy danych, w którym jest zdefiniowana.Ponownie po zmianie ustawienia zgodności bazy danych wszystkich procedur przechowywanych są automatycznie kompilowane odpowiednio.

Różnice między zgodności Bilansuj 80 i poziom 90

W tej sekcji opisano nowego zachowania wprowadzonych w systemie poziom zgodności 90.

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

Ustawienie poziom zgodności 80

Ustawienie poziom zgodności 90

Możliwość wpływ

Blokowanie wskazówki w klauzula FROM słów kluczowych WITH zawsze jest opcjonalne.

Stan bazy danych.Aby uzyskać więcej informacji zobaczFROM (Transact-SQL).

High

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

Tych operatorów nie są obsługiwane, należy użyć słowa kluczowego łączyć zewnętrzne.

High

wiązanie odwołania do kolumn na liście ORDER BY w kolumnach wyznaczonych na liście SELECT, ambiguities kolumna są ignorowane i prefiksy kolumna czasami są ignorowane.Może to spowodować, że zestaw wyników do zwrotu w kolejności, w którym nieoczekiwany.

Na przykład klauzulę ORDER BY z (pojedyncza kolumna dwóch części<table_alias>. <column>), jest używany jako odwołanie do kolumny na liście SELECT jest akceptowana, ale został zignorowany, alias tabela. Należy wziąć pod uwagę następujące kwerendy.

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 urządzenie źródłowe (kolumnax.c1) zgodnie z oczekiwaniami; zamiast tego występuje on na pochodne c1 kolumny, która jest zdefiniowana w kwerendzie. Plan wykonania dla tej kwerendy pokazuje, że wartości dla kolumna pochodna są obliczane jako pierwsze i posortowane obliczonych wartości.

Błędy są wywoływane na ambiguities kolumna.Prefiksy kolumna, jeśli istnieje określony w ORDER BY są nie ignorowane podczas wiązania z kolumna zdefiniowane na liście SELECT.

Należy wziąć pod uwagę następujące kwerendy.

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

Podczas wykonywania prefiks kolumn w klauzula ORDER BY nie jest ignorowana.Operacja sortowania jest wykonywane na określone urządzenie źródłowe (kolumnax.c1) zgodnie z oczekiwaniami. Plan wykonania dla tej kwerendy wskazuje, że operator sortowania zamówień zwracanych z wierszy t_table a następnie wartości dla kolumna pochodna c1 zdefiniowane w liście są obliczane.

Medium

W INSERT zaznacz z Unii o różnych typach danych poszczególne gałęzie UNION jest rzutować bezpośrednio z typem kolumna miejsce docelowe INSERT.Nawet wtedy, gdy Unia, używany przez samego siebie może nie działać z powodu niezgodnego typu konwersji, INSERT SELECT umożliwia sukcesu UNION, ponieważ tę gałąź, typ wyników Unii nigdy nie są konwertowane.

Typ wyniku UNION wywodzi się niezależnie od INSERT SELECT.Każda gałąź UNION rzutować na typ wyniku UNION, a następnie oddać do typu kolumna miejsce docelowe INSERT.W związku są niezgodne typy, pierwszy rzutowania mogą spowodować błąd.Aby uruchomić z poziom zgodności 90, musisz naprawić wszystkie związki niezgodny typ używany wewnątrz INSERT SELECT.

Medium

Wstawianie i aktualizacja operacje, korzystając z widoku niepoprawnie są obsługiwane w widokach, określające klauzula WITH CHECK OPTION, gdy klauzula TOP korzysta z widoku drzewa lub widok do którego istnieje odwołanie.

Wstawianie i aktualizacja operacje, korzystając z widoku nie są obsługiwane w widokach, którego używał WITH OPTION Sprawdź klauzula TOP korzysta z widoku drzewa lub widok do którego istnieje odwołanie.

Medium

Daje w wyniku SUMĘ kolumna o zmiennej długości i stałej długości kolumn o stałej długości.

Daje w wyniku SUMĘ kolumna o zmiennej długości i stałej długości kolumna o zmiennej długości.

Medium

zestaw XACT_ABORT OFF jest ignorowana wewnątrz wyzwalacza.Opcja jest zawsze zestaw on.

zestaw XACT_ABORT zestaw na OFF wewnątrz wyzwalacza.

Medium

FOR BROWSE klauzula jest dozwolony (i ignorowane) w widokach.

Klauzulę FOR BROWSE nie jest dozwolona w widokach.

Medium

Błędy domena nie są kontrolowane przez ANSI_WARNINGS.ARITHABORT zestaw tings są honorowane w przypadku ANSI_WARNINGS zestaw OFF i stamtąd jest żadna zmiana ARITHABORT.

Błędy domena są także kontrolowane przez ANSI_WARNINGS i są błędy 16 wskaźnik ważności.Jeśli ANSI_WARNINGS lub ARITHABORT są włączone, zostanie zgłoszony błąd zamiast zwracać wartość NULL.Skryptów użytkownika, które zależą od ARITHABORT ustawiony OFF może być podzielonego na tę zmianę.

Medium

Jeśli kwerenda przekazywania na dane zdalne urządzenie źródłowe [OPENROWSET lub OPENQUERY] zawiera kolumna o takich samych nazwach, nazwy kolumn zduplikowane są ignorowane, chyba że jawnie noszą nazwy kolumn w kwerendzie.

Jeśli kolumna z kolumna zduplikowanych nazw przekazywanie kwerendę dla urządzenie źródłowe danych zdalnego [OPENROWSET lub OPENQUERY], błąd zostanie zaokrąglona.

Low

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

Stałe ciąg znaków i varbinary stałe o rozmiarze większym niż 8000 są traktowane jako typ varchar(max) (lub nvarchar(max) i varbinary(max)odpowiednio). Można to zmienić typ danych tabela, utworzone przy użyciu SELECT … INTO, jeśli lista wyboru zawiera takich wyrażeń.

Low

Porównanie typów liczbowych)smallint, tinyint, int, bigint, numeric, decimal, smallmoney, money), są wykonywane przez konwertowanie comparand o niższym priorytecie w hierarchii typu na typ, którego priorytet jest wyższy.

Wartości liczbowe typu są porównywane bez konwersji.Zapewnia to lepszą wydajność.Może to jednak spowodować pewne zmiany zachowania, szczególnie w przypadkach, w którym konwersji spowodowała przepełnienie wyjątki.

Low

metadane wbudowane funkcje, które zostały argumenty ciąg znaków obciąć ich dane wejściowe, jeżeli wartość wejściowa 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 identyfikatorze unquoted pozostaje bez zmian.

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

zestaw ANSI_WARNINGS ON nie zastępuje ustawienie zestaw ARITHABORT OFF, przypadek ruchomy punkt błędów domena [czyli ujemne argumentów funkcja log()].Jeśli ANSI_WARNINGS jest włączone, ale ARITHABORT jest wyłączona, ruchomy punkt domena błędy nie powodują kwerendy ma być zakończony.

zestaw ANSI_WARNINGS ON całkowicie zastępuje ustawienie ARITHABORT OFF.Punkt domena błędów zmiennoprzecinkowych w tym przypadek spowoduje, że kwerenda ma być zakończony.

Low

Nie jest liczbą całkowitą stałe są dozwolone (i ignorowane) w klauzula ORDER BY.

Stałe nie jest liczbą całkowitą, nie są dozwolone w klauzula ORDER BY.

Low

Instrukcja zestaw pusty (z przypisaniami opcji nie zestaw) jest dozwolony.

Klauzula Empty zestaw nie jest dozwolone.

Low

Atrybut IDENTITY nie pochodzi poprawnie dla kolumn wyprodukowane przez tabela pochodnej.

Atrybut IDENTITY pochodzi poprawnie dla kolumn wyprodukowane przez pochodne tabel.

Low

Właściwość opcje dopuszczania wartości null operatory arytmetyczne przez typ danych punktu przestawne jest zawsze niewymaganym.

Właściwość opcje dopuszczania wartości null operatorów arytmetycznych nad punktem ruchomy typ danych jest zmieniany na nonnullable przypadek których danych wejściowych są nonnullable i ANSI_WARNINGS jest włączone.

Low

W INSERTSELECT instrukcja UNION, wyprodukowane przez zestawy wyników poszczególnych typów są wszystkie konwertowane na typ obiekt docelowy wynik.

W INSERTSELECT instrukcja z UNION, dominującego typ różnych gałęzi jest określony, a wyniki są konwertowane na tego typu, zanim zostanie przekonwertowany na typ tabela docelowej.

Low

W polu WybierzDLA deklaracji XML, hex(27) ( " znak ) i ( hex(22)" znak) są zawsze entitized, nawet w przypadku, gdy nie jest wymagana.

DO 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 ) nie jest entitized, jeśli wartości atrybutów są rozdzielane z "i hex(22) ( " znak ) nie jest entitized, jeśli wartości atrybutów są rozdzielane z ".

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

Low

W języku XML FOR wartość sygnatury czasowej jest mapowany do liczby całkowitej.

XML dla wartości sygnatury czasowej jest mapowany do wartości binarnej.

Aby uzyskać więcej informacji zobacz DO obsługi sygnatury czasowej typ danych XML.

Wysoka (Jeśli timestamp Kolumna jest używana); w przeciwnym razie niski

FOR XML i OPENXML wysokim zakres znaków Unicode (3 bajtów) w nazwach są reprezentowane za pomocą pozycji 8.

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

<a_x00010000_ c1="1" />

FOR XML i OPENXML wysokim zakres znaków Unicode (3 bajtów) w nazwach są reprezentowane za pomocą pozycji 6.

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

<a_x010000_ c1="1" />

Low

XML FOR pochodna tabela mapowania w trybie AUTO są traktowane jako przezroczysty.

Na przykład:

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;

Gdy poziom zgodności AdventureWorks jest zestaw do 80, powyższy przykład produkuje:

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

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

XML FOR pochodna tabela mapowania w trybie AUTO są traktowane opaquely.

Gdy poziom zgodności AdventureWorks jest zestaw do 90, daje w poprzednim przykładzie:

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

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

Wysoka (jeżeli trybu dla AUTO XML stosuje się w widokach), w przeciwnym wypadku niski

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

Znaku kreski ułamkowej odwróconej (\) jest akceptowany w ciąg wszystkich do money Konwersje we wszystkich językach. ISNUMERIC czy zwróć wartość true, kiedy \ służy jako symbol waluty.

W przypadku baz danych w wersjach SQL Server starsze niż SQL Server 2005, to nowe zachowanie powoduje przerwanie indeksy i kolumny obliczane, które zależą od ISNUMERIC zwracają wartość, która zawiera \ i językiem jest język japoński ani języka koreańskiego.

Low

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

ANSI_WARNINGS lub ARITHABORT są ustawione na wynik zmiennoprzecinkową operator arytmetyczny punkt po nonnullable, jeśli oba argumenty są nonnullable.

Ta zmiana w opcje dopuszczania wartości null może spowodować błąd podczas BCP Umożliwia eksport masowy danych, w których zastosowano format binarny z SQL Server 2000 Tabela z kolumna obliczana, która korzysta z zmiennoprzecinkową operator arytmetyczny punkt i BCP lub BULK INSERT są następnie używane zbiorczej importować te dane do SQL Server 2005 Tabela o tej samej definicji.

NoteNote:
Gdy obie opcje jest wyłączona, Database Engine oznacza wynik w postaci pustych. Działa tak samo jak w SQL Server 2000.

Low

Dla funkcje wbudowane to przyjęcie nvarchar jako parametr, jeśli jest podana wartość varchar, wartość jest konwertowany na nvarchar(4000). W SQL Server 2000, jeśli zostanie przekazany większa wartość, jest dyskretnie obcięty do liczby całkowitej.

Dla funkcje wbudowane to przyjęcie nvarchar jako parametr, jeśli jest podana wartość varchar, wartość nadal jest konwertowany na nvarchar(4000). Niemniej jednak, jeśli zostanie przekazany większa wartość, SQL Server 2008 generuje błąd.

Aby uruchomić z poziom zgodności 90, należy samodzielnie niestandardowy kod, który opiera się na zachowanie obcinania.

Low

Związek o stałej długości ()char, binary, lub nchar) ciąg znaków z (o zmiennej długościvarchar, varbinary, nvarchar) ciągów zwraca wynik o stałej długości.

Sumę ciąg zmiennym rozmiarze i ciąg o stałym rozmiarze zwraca ciąg zmiennym rozmiarze.

Aby uruchomić z poziom zgodności 90, musisz naprawić wszystkie miejsca (indeksy, kwerendy i kolumny obliczane), zależą od rodzaju wynikające z Unii typu zmiennej wielkości i typu stałym rozmiarze.

Low

Nazwy obiektów, zawierającą znak 0xFFFF są prawidłowe identyfikatory.

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

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

Low

W ISNUMERIC SELECT ("<string>'), osadzony przecinkami w ciągu <string> są istotne.

Na przykład następujące SELECT ISNUMERIC('121212,12') kwerenda zwraca 0. To oznacza, że ciąg 121212,12 nie jest liczbą.

W ISNUMERIC SELECT ("<string>'), osadzony przecinkami w ciągu <string> są ignorowane.

Na przykład następujące SELECT ISNUMERIC('121212,12') kwerenda zwraca 1. To oznaczać, że ciąg 121212,12 jest liczbą.

Low

Dwukropek (:) od zastrzeżonym słowem kluczowym w Transact-SQL Instrukcja jest ignorowana.

Dwukropek (:) od zastrzeżonym słowem kluczowym w Transact-SQL instrukcja powoduje, że instrukcja nie powiedzie się.

Low

W klauzuli GROUP BY a podkwerenda czy odwołania do kolumn z kwerendy zewnętrzne skutku.

Klauzula GROUP BY w podkwerendzie odwołujący się do kolumna z kwerendy zewnętrzne zwraca błąd według standardu SQL.

Low

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

W tej sekcji opisano nowego zachowania wprowadzonych w systemie poziom zgodności 100.

Ustawienie poziom zgodności, 90 lub niższy

Ustawienie poziom zgodności 100

Możliwość wpływ

Ustawienie QUOTED_IDENTIFER zawsze jest ustawiona na ON wieloma instrukcjami funkcji wycenione tabela podczas ich tworzenia niezależnie od ustawień poziom sesja.

Ustawienie sesja IDENTIFIER podane jest honorowane podczas tworzenia wieloma instrukcjami wycenione tabela funkcji.

Medium

Tworzenie lub zmienianie funkcja partycji, datetime i smalldatetime Literały w funkcja są obliczane przy założeniu, że US_English jako ustawienia języka.

Bieżące ustawienie języka jest używane do analizowania datetime i smalldatetime Literały w funkcja partycji.

Medium

FOR BROWSE klauzula jest dozwolony (i ignorowane) w instrukcji INSERT i SELECT INTO.

FOR BROWSE klauzula nie jest dozwolona w instrukcji INSERT i SELECT INTO.

Medium

Predykaty pełnego tekstu są dozwolone w klauzula OUTPUT.

Predykaty pełnego tekstu nie są dozwolone w klauzula OUTPUT.

Low

STOPLIST więcej CREATE, ALTER STOPLIST więcej i DROP STOPLIST więcej nie są obsługiwane.Stoplist systemu jest automatycznie kojarzona z nowe indeksy pełnotekstowe.

STOPLIST więcej CREATE, ALTER STOPLIST więcej i DROP STOPLIST więcej nie są obsługiwane.

Low

Korespondencji SERYJNEJ nie są wymuszane w zastrzeżonym słowem kluczowym.

Korespondencji SERYJNEJ jest całkowicie zastrzeżonym słowem kluczowym.Instrukcja korespondencji SERYJNEJ jest obsługiwana w obu 100-90 poziomy zgodności.

Low

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

Przechwytywanie wyniki klauzulę wyjście zagnieżdżonych INSERT, UPDATE, DELETE, lub MERGE instrukcja i wstawić tych wyniki do tabela miejsce docelowe lub w widoku.Można to zrobić przy użyciu <dml_table_source> argument instrukcja INSERT.

Low

Pod warunkiem, że nie określono NOINDEX, CHECKDB DBCC lub CHECKTABLE DBCC sprawdza zarówno fizyczne i logiczne spójności w pojedynczej tabela lub widok indeksowany i wszystkich jego nieklastrowany i indeksów XML.Przestrzennej indeksy nie są obsługiwane.

Pod warunkiem, że nie określono NOINDEX, CHECKDB DBCC lub CHECKTABLE DBCC sprawdza zarówno fizyczne i logiczne spójności w jednej tabela i wszystkich jego ponownego zbudowania indeksów nie klastrowanych.Jednak indeksy XML, przestrzennej indeksy i widoków indeksowanych spójności tylko fizyczne są sprawdzane domyślnie.

Jeżeli określono EXTENDED_LOGICAL_CHECKS WITH, logiczne są sprawdzane na widoki indeksowane, indeksy XML i przestrzennej indeksów, których obecnie.Domyślnie spójność fizyczne są sprawdzane przed sprawdzania spójności logiczne.Jeśli określony jest również NOINDEX, wykonywane są tylko testy logiczne.

Low

Po klauzula OUTPUT jest używana z język edycji danych instrukcja (DML) i błąd czas wykonania odbywa się podczas wykonywania instrukcja, cała transakcja jest zakończone i przywracane.

Po klauzula OUTPUT jest używana za pomocą instrukcja języka (DML) manipulacji na danych i wystąpi błąd wykonania podczas wykonywania instrukcja, to zachowanie zależy od ustawienia XACT_ABORT zestaw.zestaw XACT_ABORT jest wyłączona, błąd przerwania instrukcja, wygenerowany przez instrukcję DML przy użyciu klauzula Wyjście zostanie zakończona w instrukcja, ale kontynuuje wykonywanie programu wsadowego i transakcja nie zostanie przywrócona.zestaw XACT_ABORT jest włączone, wszystkie błędy czas wykonania wygenerowany przez instrukcję DML przy użyciu klauzula wyjście zakończy partia i transakcja jest cofana.

Low

moduł i ROLLUP nie są wymuszane jako zastrzeżonych słów kluczowych.

moduł i ROLLUP są zastrzeżonych słów kluczowych w klauzula GROUP BY.

Low

Ścisłe sprawdzanie poprawności jest stosowany do elementów XML anyType Typ.

Łagodnymi sprawdzania poprawności jest stosowany do elementów anyType Typ. Aby uzyskać więcej informacji zobaczWildcard Components and Content Validation.

Low

Atrybuty specjalne xsi: nil and Typ xsi: type nie będą używane przez kwerendy lub zmodyfikowany 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 Zwraca xsi:nil i xsi:type atrybuty w celu zachowania spójności z SELECT xmlCol, nawet jeśli xsi:nil = "false".

Atrybuty specjalne xsi: nil and Typ xsi: type są przechowywane jako zwykły atrybutów i można zbadać i modyfikować.

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

Low

Konwertuje wartość stała ciąg XML do funkcja zdefiniowanej przez użytkownika SQL Server Typ Data/Godzina jest oznaczony jako deterministyczny.

Konwertuje wartość stała ciąg XML do funkcja zdefiniowanej przez użytkownika SQL Server Typ Data/Godzina jest oznaczony jako nie deterministyczny.

Low

Typy związków 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

Opcje zestaw, wymagane przez metodę xQuery nie są sprawdzane, gdy metoda znajduje się w widoku lub wewnętrznej funkcja zwracająca tabela.

Opcje zestaw, wymagane przez metodę xQuery sprawdzania poprawności, gdy metoda znajduje się w widoku lub wbudowany wycenione tabela funkcja.Błąd jest wywoływane, gdy opcje zestaw metoda są ustawione niepoprawnie.

Aby uzyskać więcej informacji na temat ustawień wymaganych 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 oba znaki są zwracane zamiast pojedynczego znaku wysuwu wiersza.

Wartości atrybut XML, które zawierają znaki końca wiersza (powrotu karetki i wysuwu wiersza) są znormalizowane zgodnie ze standardem XML.Oznacza to wszystkie podziały wiersza w zewnętrznych zanalizowano jednostki (w tym obiekt dokumentu) są znormalizowane na wejściu tłumacząc #xA #xD sekwencję dwóch znaków i wszelkie #xD, który nie jest zakończony znakiem #xA #xA pojedynczy znak.

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

Low

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

Właściwości kolumn ROWGUIDCOL i IDENTITY nie może mieć nazwę jako ograniczenia.Zwracany jest błąd 156.

Low

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

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

Aktualizowanie kolumn przy użyciu przypisania dwukierunkowe daje wynik oczekiwanych wyniki, ponieważ jest dostępny tylko w instrukcja, od wartości kolumna, podczas wykonywania instrukcja.

Low

Przypisanie zmiennej jest dozwolona w instrukcja zawierających operator UNION najwyższego poziom, ale zwraca nieoczekiwane wyniki.Na przykład w następującej instrukcji, zmienna lokalna @v jest przypisywana wartość kolumna EmployeeID z Unii dwóch tabel. Z definicji kiedy instrukcja SELECT zwraca więcej niż jedną wartość zmiennej jest przypisywany ostatnia wartość, która zostanie zwrócona.W takim przypadek zmienna jest przypisana poprawnie ostatnia wartość, zestawie wyników instrukcja SELECT UNION jest również zwracana.

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;

Zmienna przypisania nie jest dozwolone w instrukcja zawierających operator UNION najwyższego poziom.Zwracany jest błąd 10734.

Aby usunąć błąd, 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

Funkcja ODBC {fn CONVERT()} używa języka domyślnego formatu data.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 format YMD.

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

Low

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

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

Low

Intrinsics daty/godziny, taki jak w parametrze DATEPART nie wymaga wprowadzania wartości ciąg jest prawidłowa data/godzina literałów.Na przykład datepart dotyczącym SELECT (rok, „ 2007/05-30 ") kompiluje pomyślnie.

Intrinsics daty/godziny, taki jak w parametrze DATEPART wymagają wprowadzania wartości ciąg jest prawidłowa data/godzina literałów.Zwracany jest błąd 241, gdy używany jest datetime Nieprawidłowy literał.

Low

Zastrzeżonych słów kluczowych

Ustawienie zgodności określa również słowa kluczowe, które są zarezerwowane przez Database Engine. W poniższej tabela przedstawiono zastrzeżonych słów kluczowych, które są wprowadzane przez każdego z poziomów zgodności.

Ustawienie poziom zgodności

Zastrzeżonych słów kluczowych

100

MODUŁ KORESPONDENCJI SERYJNEJ, PAKIET ZBIORCZY

90

ZEWNĘTRZNE, PRZESTAWNE, UNPIVOT, PRZYWRACANIE, TABLESAMPLE

80

SORTOWANIE, funkcja, OPENXML

poziom danego zgodności zastrzeżonych słów kluczowych zawierają wszystkie słowa kluczowe wprowadzone poziom lub poniżej tego poziom.W ten sposób na przykład w przypadku aplikacji poziom 100 wszystkich słów kluczowych wymienionych w powyższej tabela są zastrzeżone.Na niższych poziomach zgodności słowa kluczowe 100 poziom pozostają bez prawidłowego obiektu nazw, ale funkcje języka 100 poziom odpowiadający te słowa kluczowe są niedostępne.

Po, słowo kluczowe pozostaje zarezerwowana.Na przykład zarezerwowanym słowem kluczowym OPENXML, który został wprowadzony w polu poziom zgodności 80, również jest zarezerwowany na poziomach 90 do 100.

Jeśli aplikacja używa identyfikator, który jest zarezerwowany jako słowo kluczowe dla jego poziom zgodności, aplikacja zakończy się niepowodzeniem.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".

Aby uzyskać więcej informacji zobaczZastrzeżonych słów kluczowych języka Transact-SQL).

Uprawnienia

Wymaga ALTER uprawnień w bazie danych.

Przykłady

A.Zmiana poziom zgodności

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

Poniższy przykład pokazuje różnicę w wiązaniu ORDER BY the 80 i poziomy 100 zgodności.W przykładzie zostanie utworzony przykładową tabela SampleTable, w tempdb Baza danych.

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

Poziom zgodności 90 i wyższych, domyślny poziom, poniżej 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

Po zresetowaniu bazy danych do poziom zgodności 80, takie same SELECT... ORDER BY statement succeeds.

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

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

Na poziom zgodności 90 i wyższych, domyślny poziom, poniżej SELECT...ORDER BY instrukcja generuje błąd, ponieważ alias kolumna, określonych w klauzula ORDER BY zawiera prefiks tabela.

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

Po bazy danych jest zmieniany na poziom zgodności 80, takie same SELECT...ORDER BY Instrukcja zakończy się pomyślnie.

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

Poniżej SELECT...ORDER BY Instrukcja działa w obu poziomów zgodności, ponieważ prefiks tabela zostanie usunięte z alias kolumn określonych w klauzula ORDER BY.

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

Historia zmian

Microsoft Learning

Poprawiono zachowanie XACT_ABORT instrukcja, gdy jest to określone wewnątrz wyzwalacza.Ustawianie XACT_ABORT do OFF w wyzwalacz jest ignorowany w 80 poziom zgodności i jest dozwolony w zgodności 90 i wyższego poziomu.Poprzednie dokumentacji odwrócona tych informacji.