Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Ustawia Transact-SQL i zachowania przetwarzania zapytań, aby były zgodne z określoną wersją aparatu SQL. Aby uzyskać inne opcje ALTER DATABASE, zobacz ALTER DATABASE.
Aby uzyskać więcej informacji na temat konwencji składni, zobacz Transact-SQL konwencje składni.
Składnia
ALTER DATABASE database_name
SET COMPATIBILITY_LEVEL = { 170 | 160 | 150 | 140 | 130 | 120 | 110 | 100 }
Argumenty (w programowaniu)
database_name
Nazwa bazy danych, która ma zostać zmodyfikowana.
COMPATIBILITY_LEVEL { 170 | 160 | 150 | 140 | 130 | 120 | 110 | 100 | 90 | 80 }
Wersja programu SQL Server, z którym baza danych ma być zgodna. Można skonfigurować następujące wartości poziomu zgodności (nie wszystkie wersje obsługują wszystkie wymienione powyżej poziomy zgodności):
Produkt | Wersja aparatu bazy danych | Domyślne oznaczenie poziomu zgodności | Obsługiwane wartości poziomu zgodności |
---|---|---|---|
Azure SQL Database | 17 | 170 | 170, 160, 150, 140, 130, 120, 110, 100 |
Azure SQL Managed Instance (Zarządzana Instancja Azure SQL) | 16 | 150 | 160, 150, 140, 130, 120, 110, 100 |
SQL Server 2025 (wersja zapoznawcza 17.x) | 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 | 150 | 150, 140, 130, 120, 110, 100 |
SQL Server 2017 (14.x) | 14 | 140 | 140, 130, 120, 110, 100 |
SQL Server 2016 (13.x) | 13 | 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 |
Ważne
Numery wersji aparatu bazy danych dla programu SQL Server i usługi Azure SQL Database nie są porównywalne ze sobą, a raczej są wewnętrznymi numerami kompilacji dla tych oddzielnych produktów. Aparat bazy danych dla usługi Azure SQL Database jest oparty na tej samej bazie kodu co aparat bazy danych programu SQL Server. Co najważniejsze, aparat bazy danych w usłudze Azure SQL Database zawsze ma najnowsze bity aparatu bazy danych SQL. Wersja 12 usługi Azure SQL Database jest nowsza niż wersja 15 programu SQL Server.
Najlepsze rozwiązania dotyczące uaktualniania poziomu zgodności bazy danych
Aby uzyskać zalecany przepływ pracy uaktualniania poziomu zgodności, zobacz Zapewnianie stabilności wydajności podczas uaktualniania do nowszego programu SQL Server. Ponadto, aby uzyskać pomocną obsługę uaktualniania poziomu zgodności bazy danych, zobacz Uaktualnianie baz danych przy użyciu Asystenta dostrajania zapytań.
Uwagi
W przypadku wszystkich instalacji programu SQL Server domyślny poziom zgodności jest skojarzony z wersją aparatu bazy danych. Nowe bazy danych są ustawione na ten poziom, chyba że model
baza danych ma niższy poziom zgodności. W przypadku baz danych dołączonych lub przywróconych ze starszej wersji programu SQL Server baza danych zachowuje istniejący poziom zgodności, jeśli jest co najmniej dozwolony dla tego wystąpienia programu SQL Server. Przeniesienie bazy danych z poziomem zgodności niższym niż dozwolony przez aparat bazy danych automatycznie ustawia bazę danych na najniższy dozwolony poziom zgodności. Dotyczy to zarówno baz danych systemu, jak i użytkowników.
Następujące zachowania są oczekiwane w przypadku programu SQL Server 2017 (14.x), gdy baza danych jest dołączona lub przywrócona, oraz po uaktualnieniu w miejscu:
- Jeśli poziom zgodności bazy danych użytkownika był 100 lub wyższy przed uaktualnieniem, pozostaje taki sam po uaktualnieniu.
- Jeśli poziom zgodności bazy danych użytkownika wynosił 90 przed uaktualnieniem, w uaktualnionej bazie danych poziom zgodności jest ustawiony na 100, co jest najniższym obsługiwanym poziomem zgodności w programie SQL Server 2017 (14.x).
- Poziomy
tempdb
zgodności baz danych , ,model
msdb
i zasobów są ustawione na domyślny poziom zgodności dla danej wersji aparatu bazy danych. - Systemowa
master
baza danych zachowuje poziom zgodności, który miał przed uaktualnieniem. Nie wpłynie to na zachowanie bazy danych użytkownika.
W przypadku wstępnie istniejących baz danych działających na niższych poziomach zgodności, o ile aplikacja nie musi używać ulepszeń, które są dostępne tylko na wyższym poziomie zgodności bazy danych, jest to prawidłowe podejście do zachowania poprzedniego poziomu zgodności bazy danych. W przypadku nowych prac programistycznych lub gdy istniejąca aplikacja wymaga użycia nowych funkcji, takich jak inteligentne przetwarzanie zapytań w bazach danych SQL i niektórych nowych transact-SQL, zaplanuj uaktualnienie poziomu zgodności bazy danych do najnowszej dostępnej wersji. Aby uzyskać więcej informacji, zobacz Poziomy zgodności i Uaktualnienia aparatu bazy danych.
Uwaga / Notatka
Jeśli nie ma żadnych obiektów użytkownika i zależności, ogólnie bezpieczne jest uaktualnienie do domyślnego poziomu zgodności. Aby uzyskać więcej informacji, zobacz Zalecenia — baza danych master.
Użyj ALTER DATABASE
polecenia , aby zmienić poziom zgodności bazy danych. Nowe ustawienie poziomu zgodności dla bazy danych ma zastosowanie po USE <database>
wydaniu polecenia lub przetworzeniu nowego identyfikatora logowania z bazą danych jako domyślnym kontekstem bazy danych.
Aby wyświetlić bieżący poziom zgodności bazy danych, wykonaj zapytanie o kolumnę compatibility_level
w widoku katalogu sys.databases .
Baza danych dystrybucji utworzona we wcześniejszej wersji programu SQL Server i jest uaktualniana do programu SQL Server 2016 (13.x) RTM lub Service Pack 1 ma poziom zgodności 90, który nie jest obsługiwany w przypadku innych baz danych. Nie ma to wpływu na funkcjonalność replikacji. Uaktualnienie do nowszych dodatków Service Pack i wersji programu SQL Server spowoduje zwiększenie poziomu zgodności bazy danych dystrybucji w celu dopasowania master
jej do bazy danych.
Aby użyć ogólnego poziomu zgodności bazy danych 120 lub nowszego, ale zrezygnuj z modelu szacowania kardynalności programu SQL Server 2012 (11.x), który jest mapowany na poziom zgodności bazy danych 110, zobacz ALTER DATABASE SCOPED CONFIGURATION (ALTER DATABASE SCOPED CONFIGURATION), a w szczególności jego słowo kluczowe LEGACY_CARDINALITY_ESTIMATION = ON
.
Uwagi dotyczące usługi Azure SQL
Domyślny poziom zgodności to 170 dla nowo utworzonych baz danych w usłudze Azure SQL Database i bazie danych SQL w usłudze Microsoft Fabric.
Domyślny poziom zgodności to 150 dla nowo utworzonych baz danych w zasadach aktualizacji programu SQL Server 2022 oferty usługi Azure SQL Managed Instance.
Domyślny poziom zgodności to 170 dla nowo utworzonych baz danych w zasadach zawszeup-to-date aktualizacji oferty usługi Azure SQL Managed Instance.
Firma Microsoft nie aktualizuje automatycznie poziomu zgodności bazy danych dla istniejących baz danych. To do klientów, aby zrobić według własnego uznania.
Firma Microsoft zdecydowanie zaleca, aby klienci planować uaktualnienie do najnowszego poziomu zgodności w celu korzystania z najnowszych ulepszeń optymalizacji zapytań. Aby uzyskać porady dotyczące oceny różnic wydajności najważniejszych zapytań między dwoma różnymi poziomami zgodności w usłudze Azure SQL Database, zobacz Ulepszona wydajność zapytań z poziomem zgodności 130 w usłudze Azure SQL Database. Ten artykuł dotyczy poziomu zgodności 130 i programu SQL Server, ale ta sama metodologia dotyczy uaktualnień do 140 lub wyższych poziomów w programach SQL Server i Azure SQL Database.
Nie wszystkie funkcje, które różnią się w zależności od poziomu zgodności, są obsługiwane w usłudze Azure SQL Database.
Znajdowanie bieżącego poziomu zgodności
Aby określić bieżący poziom zgodności, wykonaj zapytanie względem compatibility_level
kolumny sys.databases.
SELECT [name],
compatibility_level
FROM sys.databases;
Aby określić wersję aparatu bazy danych, z którym nawiązano połączenie, wykonaj następujące zapytanie.
SELECT SERVERPROPERTY('ProductVersion');
Poziomy zgodności i uaktualnienia aparatu bazy danych
Poziom zgodności bazy danych jest cennym narzędziem ułatwiającym modernizację bazy danych, umożliwiając uaktualnienie aparatu bazy danych programu SQL Server przy zachowaniu tego samego stanu funkcjonalności dla łączenia aplikacji przez zachowanie tego samego poziomu zgodności bazy danych przed uaktualnieniem. Oznacza to, że istnieje możliwość uaktualnienia ze starszej wersji programu SQL Server (takiej jak SQL Server 2008 (10.0.x)) do programu SQL Server lub usługi Azure SQL Database (w tym usługi Azure SQL Managed Instance) bez zmian aplikacji (z wyjątkiem łączności z bazą danych). Aby uzyskać więcej informacji, zobacz Certyfikacja zgodności.
Jeśli aplikacja nie musi używać ulepszeń, które są dostępne tylko na wyższym poziomie zgodności bazy danych, jest to prawidłowe podejście do uaktualnienia aparatu bazy danych programu SQL Server i zachowania poprzedniego poziomu zgodności bazy danych. Aby uzyskać więcej informacji na temat korzystania z poziomu zgodności z poprzednimi wersjami, zobacz Certyfikacja zgodności.
Poziomy zgodności i procedury składowane
Gdy procedura składowana jest wykonywana, używa bieżącego poziomu zgodności bazy danych, w której jest ona zdefiniowana. Po zmianie ustawienia zgodności bazy danych wszystkie jej procedury składowane zostaną automatycznie ponownie skompilowane.
Używanie poziomu zgodności na potrzeby zgodności z poprzednimi wersjami
Ustawienie poziomu zgodności bazy danych zapewnia zgodność z poprzednimi wersjami programu SQL Server w odniesieniu do Transact-SQL i zachowania optymalizacji zapytań tylko dla określonej bazy danych, a nie dla całego serwera.
Począwszy od trybu zgodności 130, każdy nowy plan zapytania wpływający na poprawki i funkcje zostały celowo dodane tylko do nowego poziomu zgodności. Zostało to zrobione w celu zminimalizowania ryzyka podczas uaktualnień, które wynikają z obniżenia wydajności z powodu zmian planu zapytań potencjalnie wprowadzonych przez nowe zachowania optymalizacji zapytań.
Z perspektywy aplikacji użyj niższego poziomu zgodności jako bezpieczniejszej ścieżki migracji, aby obejść różnice wersji, w zachowaniach kontrolowanych przez odpowiednie ustawienie poziomu zgodności. Celem nadal powinno być uaktualnienie do najnowszego poziomu zgodności w pewnym momencie, aby dziedziczyć niektóre nowe funkcje, takie jak inteligentne przetwarzanie zapytań w bazach danych SQL, ale aby to zrobić w kontrolowany sposób.
Aby uzyskać więcej informacji, w tym zalecany przepływ pracy uaktualniania poziomu zgodności bazy danych, zobacz Best Practices for upgrade database compatibility level (Najlepsze rozwiązania dotyczące uaktualniania poziomu zgodności bazy danych).
Nieobsługiwane funkcje wprowadzone w danej wersji programu SQL Server nie są chronione przez poziom zgodności. Dotyczy to funkcji, które zostały usunięte z aparatu bazy danych programu SQL Server. Na przykład
FASTFIRSTROW
wskazówka została przerwana w programie SQL Server 2012 (11.x) i zastąpiona wskazówkąOPTION (FAST n )
. Ustawienie poziomu zgodności bazy danych na 110 nie spowoduje przywrócenia nieobsługiwanej wskazówki. Aby uzyskać więcej informacji na temat nieobsługiwanej funkcjonalności, zobacz Temat Nieobsługiwane funkcje aparatu bazy danych w programie SQL Server.Zmiany powodujące niezgodność wprowadzone w danej wersji programu SQL Server mogą nie być chronione przez poziom zgodności. Dotyczy to zmian zachowania między wersjami aparatu bazy danych programu SQL Server. Transact-SQL zachowanie jest zwykle chronione przez poziom zgodności. Jednak zmienione lub usunięte obiekty systemowe nie są chronione przez poziom zgodności.
Przykładem zmiany powodującej niezgodność chronioną przez poziom zgodności jest niejawna konwersja z typów danych datetime do datetime2. W obszarze Poziom zgodności bazy danych 130 te pokazują lepszą dokładność, uwzględniając ułamkowe milisekundy, co powoduje różne przekonwertowane wartości. Aby przywrócić poprzednie zachowanie konwersji, ustaw poziom zgodności bazy danych na 120 lub niższy.
Przykłady zmian powodujących niezgodność , które nie są chronione przez poziom zgodności:
Zmieniono nazwy kolumn w obiektach systemowych. W programie SQL Server 2012 (11.x) nazwa kolumny w
single_pages_kb
plikusys.dm_os_sys_info
została zmieniona napages_kb
. Niezależnie od poziomu zgodności zapytanieSELECT single_pages_kb FROM sys.dm_os_sys_info
generuje błąd 207 (Nieprawidłowa nazwa kolumny).Usunięto obiekty systemowe. W programie SQL Server 2012 (11.x)
sp_dboption
usunięto element . Niezależnie od poziomu zgodności instrukcjaEXEC sp_dboption 'AdventureWorks2022', 'autoshrink', 'FALSE';
generuje błąd 2812 (Could not find stored procedure 'sp_dboption'
).Aby uzyskać więcej informacji na temat zmian powodujących niezgodność, zobacz:
Różnice między poziomami zgodności
W przypadku wszystkich instalacji programu SQL Server domyślny poziom zgodności jest skojarzony z wersją aparatu bazy danych, jak pokazano w tej tabeli. W przypadku nowych prac programistycznych należy zawsze planować certyfikowanie aplikacji na najnowszym poziomie zgodności bazy danych.
Nowa składnia Transact-SQL nie jest bramowana przez poziom zgodności bazy danych, z wyjątkiem sytuacji, gdy mogą one przerwać istniejące aplikacje przez utworzenie konfliktu z kodem Transact-SQL użytkownika. Te wyjątki opisano w kolejnych sekcjach tego artykułu, które przedstawiają różnice między określonymi poziomami zgodności.
Poziom zgodności bazy danych zapewnia również zgodność z poprzednimi wersjami programu SQL Server, ponieważ bazy danych dołączone lub przywrócone z wcześniejszej wersji programu SQL Server zachowują istniejący poziom zgodności (jeśli jest taki sam lub wyższy niż minimalny dozwolony poziom zgodności). Omówiono to w sekcji Korzystanie ze zgodności dla zgodności z poprzednimi wersjami tego artykułu.
Począwszy od poziomu zgodności bazy danych 130, wszystkie nowe poprawki i funkcje wpływające na plany zapytań zostały dodane tylko do najnowszego dostępnego poziomu zgodności, nazywanego również domyślnym poziomem zgodności. Zostało to zrobione w celu zminimalizowania ryzyka podczas uaktualnień, które wynikają z obniżenia wydajności z powodu zmian planu zapytań, potencjalnie wprowadzonych przez nowe zachowania optymalizacji zapytań.
Podstawowe zmiany wpływające na plan dodane tylko do domyślnego poziomu zgodności nowej wersji aparatu bazy danych to:
Poprawki optymalizatora zapytań wydane dla poprzednich wersji programu SQL Server w flagi śledzenia 4199 stają się automatycznie włączone na domyślnym poziomie zgodności nowszej wersji programu SQL Server.
Dotyczy: SQL Server (począwszy od wersji SQL Server 2016 (13.x)), Azure SQL Database.
Na przykład po wydaniu programu SQL Server 2016 (13.x) wszystkie poprawki optymalizatora zapytań wydane dla poprzednich wersji programu SQL Server (i odpowiednich poziomów zgodności od 100 do 120) stały się automatycznie włączone dla baz danych korzystających z domyślnego poziomu zgodności programu SQL Server 2016 (13.x). Tylko poprawki optymalizatora zapytań po RTM muszą być jawnie włączone.
Aby włączyć poprawki optymalizatora zapytań, można użyć następujących metod:
- Na poziomie serwera z flagą śledzenia 4199.
- Na poziomie bazy danych z opcją
QUERY_OPTIMIZER_HOTFIXES
ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL). - Na poziomie zapytania z
USE HINT 'ENABLE_QUERY_OPTIMIZER_HOTFIXES'
wskazówką zapytania , modyfikując zapytanie. - Na poziomie zapytania z
USE HINT 'ENABLE_QUERY_OPTIMIZER_HOTFIXES'
bez wprowadzania zmian w kodzie za pomocą funkcji wskazówek magazynu zapytań .
Później, gdy program SQL Server 2017 (14.x) został wydany, wszystkie poprawki optymalizatora zapytań wydane po programie SQL Server 2016 (13.x) RTM stały się automatycznie włączone dla baz danych przy użyciu domyślnego poziomu zgodności programu SQL Server 2017 (14.x). Jest to skumulowane zachowanie, które obejmuje również wszystkie poprzednie poprawki wersji. Ponownie tylko poprawki optymalizatora zapytań po RTM muszą być jawnie włączone.
Poniższa tabela zawiera podsumowanie tego zachowania:
Wersja aparatu bazy danych (DE) Poziom zgodności bazy danych TF 4199 Zmiany QO ze wszystkich poprzednich poziomów zgodności bazy danych Zmiany QO dla wersji po RTM (DE) 13 (SQL Server 2016 (13.x)) Od 100 do 120
130Wyłączony
Włączone
Wyłączony
WłączoneNiepełnosprawny
Włączone
Włączone
WłączoneNiepełnosprawny
Włączone
Niepełnosprawny
Włączone14 (SQL Server 2017 (14.x)) Od 100 do 120
130
140Wyłączony
Włączone
Wyłączony
Włączone
Wyłączony
WłączoneNiepełnosprawny
Włączone
Włączone
Włączone
Włączone
WłączoneNiepełnosprawny
Włączone
Niepełnosprawny
Włączone
Niepełnosprawny
Włączone15 (SQL Server 2019 (15.x)) i (Azure SQL Database) Od 100 do 120
Od 130 do 140
150Wyłączony
Włączone
Wyłączony
Włączone
Wyłączony
WłączoneNiepełnosprawny
Włączone
Włączone
Włączone
Włączone
WłączoneNiepełnosprawny
Włączone
Niepełnosprawny
Włączone
Niepełnosprawny
Włączone16 (SQL Server 2022 (16.x)) i (Azure SQL Database) Od 100 do 120
Od 130 do 150
160Wyłączony
Włączone
Wyłączony
Włączone
Wyłączony
WłączoneNiepełnosprawny
Włączone
Włączone
Włączone
Włączone
WłączoneNiepełnosprawny
Włączone
Niepełnosprawny
Włączone
Niepełnosprawny
Włączone17 (SQL Server 2025 (17.x) (wersja zapoznawcza), Usługa Azure SQL Database i baza danych SQL w usłudze Microsoft Fabric) Od 100 do 120
Od 130 do 160
170Wyłączony
Włączone
Wyłączony
Włączone
Wyłączony
WłączoneNiepełnosprawny
Włączone
Włączone
Włączone
Włączone
WłączoneNiepełnosprawny
Włączone
Niepełnosprawny
Włączone
Niepełnosprawny
WłączoneOptymalizator zapytań naprawia poprawki, które dotyczą nieprawidłowych wyników lub błędów naruszenia dostępu, nie są chronione przez flagę śledzenia 4199. Te poprawki nie są uznawane za opcjonalne.
Zmiany w narzędziu do szacowania kardynalności wydane w programie SQL Server, usłudze Azure SQL Database i bazie danych SQL w usłudze Microsoft Fabric są włączone tylko w domyślnym poziomie zgodności nowej wersji aparatu bazy danych, ale nie na poprzednich poziomach zgodności.
Na przykład po wydaniu programu SQL Server 2016 (13.x) zmiany procesu szacowania kardynalności były dostępne tylko dla baz danych przy użyciu domyślnego poziomu zgodności programu SQL Server 2016 (13.x). Poprzednie poziomy zgodności zachowały zachowanie szacowania kardynalności, które było dostępne przed programem SQL Server 2016 (13.x).
Później, gdy program SQL Server 2017 (14.x) został wydany, nowsze zmiany procesu szacowania kardynalności były dostępne tylko dla baz danych przy użyciu programu SQL Server 2017 (14.x) domyślnego poziomu zgodności (140). Poziom zgodności bazy danych 130 zachował zachowanie szacowania kardynalności programu SQL Server 2016 (13.x).
Poniższa tabela zawiera podsumowanie tego zachowania:
Wersja aparatu bazy danych Poziom zgodności bazy danych Nowe zmiany wersji CE 13 (SQL Server 2016 (13.x)) < 130
130Niepełnosprawny
Włączone14 (SQL Server 2017 (14.x))1 < 140
140Niepełnosprawny
Włączone15 (SQL Server 2019 (15.x))1 < 150
150Niepełnosprawny
Włączone16 (SQL Server 2022 (16.x))1 < 160
160Niepełnosprawny
Włączone17 (SQL Server 2025 (17.x) Preview)1 < 170
170Niepełnosprawny
Włączone1 Dotyczy również usług Azure SQL Database i SQL Database w usłudze Microsoft Fabric.
Inne różnice między określonymi poziomami zgodności są dostępne w kolejnych sekcjach tego artykułu.
Różnice między poziomem zgodności 160 a poziomem 170
W tej sekcji opisano nowe zachowania wprowadzone z poziomem zgodności 170.
Ustawienie poziomu zgodności na poziomie 160 lub niższym | Ustawienie poziomu zgodności 170 |
---|---|
Aby chronić materiał klucza symetrycznego, klucz główny bazy danych i klucz główny usługi, program SQL Server i usługa Azure SQL przechowuje materiał klucza w postaci zaszyfrowanej. Szyfrowanie używa trybu wypełnienia PKCS#1 w wersji 1.5. | Aby chronić materiał klucza symetrycznego, klucz główny bazy danych i klucz główny usługi, program SQL Server i usługa Azure SQL przechowuje materiał klucza w postaci zaszyfrowanej. Szyfrowanie używa trybu dopełnienia OAEP-256. W dm_database_encryption_keys encryptor_type będą wyświetlane jako CERTIFICATE_OAEP_256 zamiast CERTIFICATE . |
Wyrażenia regularne mogą służyć do dopasowywania złożonych wzorców i manipulowania danymi w programie SQL Server i bazie danych Azure SQL Database. Dodano obsługę wyrażeń regularnych w języku T-SQL. Niektóre funkcje wyrażeń regularnych nie są dostępne we wszystkich poziomach zgodności bazy danych Aby uzyskać więcej informacji, zobacz Funkcje wyrażeń regularnych. | Wprowadzono funkcje wyrażeń regularnych, takie jak REGEXP_LIKE, REGEXP_MATCHES i REGEXP_SPLIT_TO_TABLE umożliwiają dopasowywanie, wyodrębnianie i dzielenie wzorców bezpośrednio w języku T-SQL. |
Dodano aparat bazy danych możliwość tworzenia osadzania sztucznej inteligencji (tablic wektorowych) z wyrażeń tekstowych. Aby uzyskać więcej informacji, zobacz Funkcje sztucznej inteligencji. | Wprowadza funkcję AI_GENERATE_CHUNKS, która umożliwia fragmentowanie tekstu na potrzeby użycia modelu sztucznej inteligencji, co poprawia integrację z usługami sztucznej inteligencji. |
Tradycyjnie aparat bazy danych chroni instrukcje DML przed problemem Halloween, wprowadzając operator buforu w planie zapytania lub korzystając z innego operatora blokującego, który już istnieje w planie, na przykład Sort lub Hash Match. | Zoptymalizowana ochrona Halloween usuwa niepotrzebne operatory buforowania i poprawia wydajność zapytań podczas operacji DML, w których wymagana jest ochrona Halloween. |
Zapytania sparametryzowane mogą mieć wiele buforowanych planów zapytań dla różnych kategorii wyboru parametru. Optymalizacja planu poufnego parametru jest domyślnie włączona w poziomie zgodności 160 tylko dla wybranych zapytań | Gdy optymalizacja planu wrażliwego na parametr działa w ramach poziomu zgodności 170, obsługa zapytań DML, a także obsługa jest tempdb dostępna |
Zapytania sparametryzowane, które mają parametry opcjonalne, mogą cierpieć na nieoptymalne plany z powodu wąchania parametrów. | Optymalizacja planu zapytania dla opcjonalnych parametrów, zwiększając wydajność, generując bardziej odpowiednie plany dla wartości NULL i innych niż NULL. |
Różnice między poziomem zgodności 150 a poziomem 160
W tej sekcji opisano nowe zachowania wprowadzone na poziomie zgodności 160.
Ustawienie poziomu zgodności na poziomie 150 lub niższym | Ustawienie poziomu zgodności 160 |
---|---|
Zapytania sparametryzowane mają pojedynczy plan zapytania na podstawie parametrów używanych do pierwszego wykonania. Tylko jeden plan zapytania jest buforowany i używany dla wszystkich wartości parametrów. Może to spowodować, że plan zapytania będzie nieefektywny dla niektórych wartości parametru, nazywany również planem poufnym parametru. | Zapytania sparametryzowane mogą mieć wiele buforowanych planów zapytań dla różnych kategorii wyboru parametru. Optymalizacja planu poufnego parametru jest domyślnie włączona w poziomie zgodności 160. Aby uzyskać więcej informacji, zobacz Optymalizacja PSP. |
Szacowanie kardynalności używa tylko jednego domyślnego zestawu założeń modelu dotyczących bazowego rozkładu danych i wzorców użycia dla wszystkich baz danych i zapytań. Jedynym sposobem zmiany lub dostosowania jednego z tych założeń jest to, że użytkownik podejmuje proces ręczny, aby jawnie wskazać, które założenia modelu powinny być używane, korzystając z wskazówek dotyczących zapytań. Po wygenerowaniu planu zapytania nie można dostosować go do tego domyślnego modelu. | Szacowanie kardynalności rozpoczyna się od domyślnego zestawu założeń modelu dotyczących bazowego rozkładu danych i wzorców użycia, ale po niektórych wykonaniach dla danego zapytania aparat bazy danych uczy się, które różne zestawy założeń modelu mogą przynieść dokładniejsze szacunki, a zatem dostosowuje założenia używane do lepszego dopasowania zestawu danych, którego dotyczy zapytanie. Opinia CE jest domyślnie włączona w poziomie zgodności 160. Aby uzyskać więcej informacji, zobacz ocena kardynalności (CE) feedback. |
Aparat bazy danych nie próbuje automatycznie określić optymalnego stopnia równoległości. Aby uzyskać informacje na temat ręcznego kontrolowania maksymalnego stopnia równoległości (MAXDOP) na poziomie wystąpienia, bazy danych, zapytania lub obciążenia, zobacz Konfiguracja serwera: maksymalny stopień równoległości | Stopień równoległości (DOP) Feedback poprawia wydajność zapytań, identyfikując nieefektywność równoległości dla powtarzających się zapytań na podstawie czasu i oczekiwania. Jeśli użycie równoległości zostanie uznane za nieefektywne, opinia dop dop obniży dop do następnego wykonania zapytania, z dowolnego skonfigurowanego dostawcy dop i sprawdź, czy pomaga. Opinia o usłudze DOP nie jest domyślnie włączona. Aby włączyć funkcję DOP Feedback, włącz DOP_FEEDBACK konfigurację w zakresie bazy danych w bazie danych. Aby uzyskać więcej informacji, zobacz informacje zwrotne na temat stopnia równoległości (DOP). |
Różnice między poziomem zgodności 140 a poziomem 150
W tej sekcji opisano nowe zachowania wprowadzone na poziomie zgodności 150.
Ustawienie poziomu zgodności na poziomie 140 lub niższym | Ustawienie poziomu zgodności 150 |
---|---|
Relacyjny magazyn danych i obciążenia analityczne mogą nie być w stanie używać indeksów magazynu kolumn ze względu na obciążenie OLTP, brak obsługi dostawcy lub inne ograniczenia. Bez indeksów magazynu kolumn te obciążenia nie mogą korzystać z trybu wykonywania wsadowego. | Tryb wykonywania wsadowego jest teraz dostępny dla obciążeń analitycznych bez konieczności stosowania indeksów magazynu kolumn. Aby uzyskać więcej informacji, zobacz tryb wsadowy w magazynie wierszy. |
Zapytania w trybie wiersza, które żądają niewystarczającej ilości przydziału pamięci, które powodują rozlanie na dysk, może nadal mieć problemy z kolejnymi wykonaniami. | Zapytania w trybie wiersza, które żądają niewystarczającej ilości przydziału pamięci, które powodują rozlanie na dysk, może zwiększyć wydajność kolejnych wykonań. Aby uzyskać więcej informacji, zobacz opinie dotyczące udzielania informacji zwrotnych w trybie wiersza. |
Zapytania w trybie wiersza, które żądają nadmiernego rozmiaru przydziału pamięci, które powoduje problemy ze współbieżnością, mogą nadal mieć problemy z kolejnymi wykonaniami. | Zapytania w trybie wiersza, które żądają nadmiernego rozmiaru przydziału pamięci, co powoduje problemy ze współbieżnością, mogło poprawić współbieżność w przypadku kolejnych wykonań. Aby uzyskać więcej informacji, zobacz opinie dotyczące udzielania informacji zwrotnych w trybie wiersza. |
Zapytania odwołujące się do skalarnych funkcji zdefiniowanych przez użytkownika języka T-SQL będą używać iteracyjnych wywołań, braku kosztujących i wymuszania wykonywania szeregowego. | Skalarne funkcje zdefiniowane przez użytkownika języka T-SQL są przekształcane w równoważne wyrażenia relacyjne, które są "wbudowane" w zapytanie wywołujące, często powodując znaczne wzrosty wydajności. Aby uzyskać więcej informacji, zobacz Scalar UDF inlining języka T-SQL. |
Zmienne tabeli używają stałego odgadnięcia dla oszacowania kardynalności. Jeśli rzeczywista liczba wierszy jest znacznie większa niż wartość odgadnięcia, wydajność operacji podrzędnych może ulec spadkowi. | Nowe plany będą używać rzeczywistej kardynalności zmiennej tabeli napotkanej podczas pierwszej kompilacji zamiast stałego odgadnięcia. Aby uzyskać więcej informacji, zobacz kompilację odroczonej zmiennej tabeli. |
Aby uzyskać więcej informacji na temat funkcji przetwarzania zapytań włączonych w poziomie zgodności bazy danych 150, zobacz Co nowego w programie SQL Server 2019 i inteligentne przetwarzanie zapytań w bazach danych SQL.
Różnice między poziomem zgodności 130 i poziomem 140
W tej sekcji opisano nowe zachowania wprowadzone na poziomie zgodności 140.
Ustawienie poziomu zgodności na poziomie 130 lub niższym | Ustawienie poziomu zgodności 140 |
---|---|
Szacunki kardynalności dla instrukcji odwołujące się do funkcji z wieloma instrukcjami z wartościami tabeli używają stałego zgadywania wierszy. | Szacunki kardynalności dla kwalifikujących się instrukcji odwołujące się do funkcji z wieloma instrukcjami z wartościami tabeli będą używać rzeczywistej kardynalności danych wyjściowych funkcji. Ta funkcja jest włączona za pośrednictwem przeplatanego wykonywania dla funkcji z wieloma instrukcjami tabel. |
Zapytania w trybie wsadowym, które żądają niewystarczającego rozmiaru przydziału pamięci, które powodują rozlanie na dysk, może nadal mieć problemy z kolejnymi wykonaniami. | Zapytania w trybie wsadowym, które żądają niewystarczającego rozmiaru przydziału pamięci, które powodują rozlanie na dysk, może zwiększyć wydajność kolejnych wykonań. Ta funkcja jest włączona za pośrednictwem pamięci trybu wsadowego, która zaktualizuje rozmiar przydziału pamięci w planie buforowanym, jeśli wystąpiły wycieki dla operatorów trybu wsadowego. |
Zapytania trybu wsadowego, które żądają nadmiernego rozmiaru przydziału pamięci, co powoduje problemy ze współbieżnością, mogą nadal mieć problemy z kolejnymi wykonaniami. | Zapytania w trybie wsadowym, które żądają nadmiernego rozmiaru przydziału pamięci, co powoduje problemy ze współbieżnością, mogło poprawić współbieżność w przypadku kolejnych wykonań. Jest to włączone za pośrednictwem pamięci trybu wsadowego, które zaktualizują rozmiar przydziału pamięci w ramach buforowanego planu, jeśli pierwotnie zażądano nadmiernej ilości. |
Zapytania trybu wsadowego zawierające operatory sprzężenia kwalifikują się do trzech algorytmów sprzężenia fizycznego, w tym zagnieżdżonej pętli, sprzężenia skrótu i sprzężenia scalania. Jeśli szacunki kardynalności są niepoprawne dla danych wejściowych sprzężenia, można wybrać niewłaściwy algorytm sprzężenia. W takim przypadku wydajność będzie cierpieć, a niewłaściwy algorytm sprzężenia pozostanie w użyciu do czasu ponownego skompilowania buforowanego planu. | Istnieje dodatkowy operator sprzężenia nazywany sprzężenia adaptacyjnego. Jeśli szacunki kardynalności są niepoprawne dla danych wejściowych sprzężenia kompilacji zewnętrznej, można wybrać niewłaściwy algorytm sprzężenia. Jeśli tak się stanie, a instrukcja kwalifikuje się do sprzężenia adaptacyjnego, zagnieżdżona pętla będzie używana dla mniejszych danych wejściowych sprzężenia, a sprzężenie skrótu będzie używane w przypadku większych danych wejściowych sprzężenia dynamicznie bez konieczności ponownego komplikowania. |
Trywialne plany odwołujące się do indeksów magazynu kolumn nie kwalifikują się do wykonywania trybu wsadowego. | Trywialny plan odwołujący się do indeksów magazynu kolumn zostanie odrzucony na rzecz planu kwalifikującego się do wykonania trybu wsadowego. |
sp_execute_external_script Operator UDX może działać tylko w trybie wiersza. |
Operator sp_execute_external_script UDX kwalifikuje się do wykonywania trybu wsadowego. |
Funkcje z wieloma instrukcjami tabeli (TVFs) nie mają przeplatanego wykonywania | Przeplatane wykonywanie dla wielowykładowych plików TVFs w celu poprawy jakości planu. |
Poprawki, które były w flagi śledzenia 4199 we wcześniejszych wersjach programu SQL Server wcześniejszych niż SQL Server 2017, są teraz domyślnie włączone. Z trybem zgodności 140. Flaga śledzenia 4199 będzie nadal dotyczyć nowych poprawek optymalizatora zapytań wydanych po programie SQL Server 2017. Aby uzyskać informacje o flagi śledzenia 4199, zobacz Trace Flag 4199.
Różnice między poziomem zgodności 120 a poziomem 130
W tej sekcji opisano nowe zachowania wprowadzone z poziomem zgodności 130.
Ustawienie poziomu zgodności na poziomie 120 lub niższym | Ustawienie poziomu zgodności 130 |
---|---|
Instrukcja INSERT w instrukcji INSERT-SELECT jest jednowątkowa. | Instrukcja INSERT w instrukcji INSERT-SELECT jest wielowątkowa lub może mieć plan równoległy. |
Zapytania w tabeli zoptymalizowanej pod kątem pamięci wykonują jednowątkowy. | Zapytania w tabeli zoptymalizowanej pod kątem pamięci mogą teraz mieć plany równoległe. |
Wprowadzono narzędzie do szacowania kardynalności SQL 2014 CardinalityEstimationModelVersion="120" |
Dalsze ulepszenia szacowania kardynalności (CE) z modelem szacowania kardynalności 130, który jest widoczny w planie zapytania. CardinalityEstimationModelVersion="130" |
Tryb wsadowy a tryb wiersza zmienia się za pomocą indeksów magazynu kolumn:
|
Tryb wsadowy a tryb wiersza zmienia się za pomocą indeksów magazynu kolumn:
|
Statystyki można aktualizować automatycznie. | Logika, która automatycznie aktualizuje statystyki, jest bardziej agresywna w przypadku dużych tabel. W praktyce powinno to zmniejszyć liczbę przypadków, w których klienci widzieli problemy z wydajnością zapytań, w których nowo wstawione wiersze są często wykonywane, ale gdy statystyki nie zostały zaktualizowane w celu uwzględnienia tych wartości. |
Śledzenie 2371 jest domyślnie wyłączone w programie SQL Server 2014 (12.x). |
Śledzenie 2371 jest domyślnie włączone w programie SQL Server 2016 (13.x). Flaga śledzenia 2371 informuje aktualizator statystyk automatycznych, aby próbkował mniejszy, ale mądrzejszy podzestaw wierszy w tabeli zawierającej wiele wierszy. Jednym z ulepszeń jest uwzględnienie w przykładzie większej liczby wierszy wstawionych ostatnio. Innym ulepszeniem jest umożliwianie uruchamiania zapytań podczas uruchamiania procesu statystyk aktualizacji, a nie blokowania zapytania. |
W przypadku poziomu 120 statystyki są próbkowane przez proces jednowątkowy. | W przypadku poziomu 130 statystyki są próbkowane przez proces wielowątkowy (proces równoległy). |
Limit to 253 przychodzące klucze obce. | Do danej tabeli można odwoływać się do maksymalnie 10 000 przychodzących kluczy obcych lub podobnych odwołań. Aby uzyskać informacje o ograniczeniach, zobacz Tworzenie relacji kluczy obcych. |
Przestarzałe algorytmy skrótów MD2, MD4, MD5, SHA i SHA1 są dozwolone. | Dozwolone są tylko algorytmy skrótów SHA2_256 i SHA2_512. |
Program SQL Server 2016 (13.x) zawiera ulepszenia konwersji niektórych typów danych i niektóre operacje (w większości nietypowe). Aby uzyskać szczegółowe informacje, zobacz Ulepszenia programu SQL Server i usługi Azure SQL Database dotyczące obsługi niektórych typów danych i nietypowych operacji. | |
Funkcja STRING_SPLIT jest niedostępna. |
Funkcja STRING_SPLIT jest dostępna na poziomie zgodności 130 lub wyższym. Jeśli poziom zgodności bazy danych jest niższy niż 130, program SQL Server nie będzie mógł znaleźć i wykonać STRING_SPLIT funkcji. |
Poprawki, które były pod flagą śledzenia 4199 we wcześniejszych wersjach programu SQL Server wcześniejszych niż SQL Server 2016 (13.x) są teraz domyślnie włączone. Z trybem zgodności 130. Flaga śledzenia 4199 nadal będzie dotyczyć nowych poprawek optymalizatora zapytań wydanych po programie SQL Server 2016 (13.x). Aby użyć starszego optymalizatora zapytań w usłudze SQL Database, należy wybrać poziom zgodności 110. Aby uzyskać informacje o flagi śledzenia 4199, zobacz Trace Flag 4199.
Różnice między niższymi poziomami zgodności a poziomem 120
W tej sekcji opisano nowe zachowania wprowadzone z poziomem zgodności 120.
Ustawienie poziomu zgodności na poziomie 110 lub niższym | Ustawienie poziomu zgodności 120 |
---|---|
Używany jest starszy optymalizator zapytań. | Program SQL Server 2014 (12.x) zawiera znaczne ulepszenia składnika, który tworzy i optymalizuje plany zapytań. Ta nowa funkcja optymalizatora zapytań jest zależna od użycia poziomu zgodności bazy danych 120. Nowe aplikacje baz danych należy opracowywać przy użyciu poziomu zgodności bazy danych 120, aby móc korzystać z tych ulepszeń. Aplikacje migrowane z wcześniejszych wersji programu SQL Server powinny być starannie przetestowane, aby potwierdzić, że dobra wydajność została zachowana lub ulepszona. W przypadku obniżenia wydajności można ustawić poziom zgodności bazy danych na 110 lub starszy, aby użyć starszej metodologii optymalizatora zapytań. Poziom zgodności bazy danych 120 używa nowego narzędzia do szacowania kardynalności, który jest dostosowany do nowoczesnych obciążeń magazynowania danych i OLTP. Przed ustawieniem poziomu zgodności bazy danych na 110 z powodu problemów z wydajnością zapoznaj się z zaleceniami w sekcji Plany zapytań w temacie Co nowego w programie SQL Server 2016. |
W przypadku poziomów zgodności niższych niż 120 ustawienie języka jest ignorowane podczas konwertowania wartości daty na wartość ciągu. To zachowanie jest specyficzne tylko dla typu daty . Zobacz przykład B w sekcji Przykłady . | Ustawienie języka nie jest ignorowane podczas konwertowania wartości daty na wartość ciągu. |
Rekursywne odwołania po prawej stronie EXCEPT klauzuli tworzą pętlę nieskończoną. Przykładowy kod C w sekcji Przykłady pokazuje to zachowanie. |
Odwołania cykliczne w EXCEPT klauzuli generują błąd zgodny ze standardem ANSI SQL. |
Rekursywne wspólne wyrażenie tabeli (CTE) zezwala na zduplikowane nazwy kolumn. | Rekursywna funkcja CTE nie zezwala na zduplikowane nazwy kolumn. |
Wyłączone wyzwalacze są włączone, jeśli wyzwalacze zostaną zmienione. | Zmiana wyzwalacza nie powoduje zmiany stanu wyzwalacza (włączonego lub wyłączonego). |
Klauzula TABELI OUTPUT INTO ignoruje wartość IDENTITY_INSERT SETTING = OFF i umożliwia wstawienie jawnych wartości. |
Nie można wstawić jawnych wartości dla kolumny tożsamości w tabeli, gdy IDENTITY_INSERT jest ustawiona wartość OFF. |
Gdy zawieranie bazy danych jest ustawione na częściowe, walidacja $action pola w OUTPUT klauzuli MERGE instrukcji może zwrócić błąd sortowania. |
Sortowanie wartości zwracanych przez $action klauzulę MERGE instrukcji to sortowanie bazy danych zamiast sortowania serwera, a błąd konfliktu sortowania nie jest zwracany. |
Instrukcja SELECT INTO zawsze tworzy operację wstawiania jednowątkowego. |
Instrukcja SELECT INTO może utworzyć operację wstawiania równoległego. Podczas wstawiania dużej liczby wierszy operacja równoległa może zwiększyć wydajność. |
Różnice między niższymi poziomami zgodności a poziomami 100 i 110
W tej sekcji opisano nowe zachowania wprowadzone na poziomie zgodności 110. Ta sekcja dotyczy również poziomów zgodności powyżej 110.
Ustawienie poziomu zgodności na poziomie 100 lub niższym | Ustawienie poziomu zgodności co najmniej 110 |
---|---|
Obiekty bazy danych środowiska uruchomieniowego języka wspólnego (CLR) są wykonywane z wersją 4 środowiska CLR. Jednak niektóre zmiany zachowania wprowadzone w wersji 4 środowiska CLR są unikane. Aby uzyskać więcej informacji, zobacz Co nowego w integracji środowiska CLR? | Obiekty bazy danych CLR są wykonywane z wersją 4 środowiska CLR. |
Funkcje XQuery ciąg-length i podciąg liczą każdy zastępca jako dwa znaki. | Funkcje XQuery długości ciągów i podciągów zliczają każdy zastępca jako jeden znak. |
PIVOT wartość jest dozwolona w cyklicznym zapytaniu wyrażenia tabeli (CTE). Jednak zapytanie zwraca nieprawidłowe wyniki, gdy istnieje wiele wierszy na grupowanie. |
PIVOT nie jest dozwolone w cyklicznym zapytaniu wspólnego wyrażenia tabeli (CTE). Zwracany jest błąd. |
Algorytm RC4 jest obsługiwany tylko w przypadku zgodności z poprzednimi wersjami. Nowy materiał można szyfrować tylko przy użyciu wersji RC4 lub RC4_128, gdy baza danych jest zgodna z poziomem zgodności 90 lub 100. (Niezalecane). W programie SQL Server 2012 (11.x) materiał zaszyfrowany przy użyciu wersji RC4 lub RC4_128 można odszyfrować na dowolnym poziomie zgodności. | Nie można zaszyfrować nowego materiału przy użyciu wersji RC4 lub RC4_128. Zamiast tego użyj nowszego algorytmu, takiego jak jeden z algorytmów AES. W programie SQL Server 2012 (11.x) materiał zaszyfrowany przy użyciu wersji RC4 lub RC4_128 można odszyfrować na dowolnym poziomie zgodności. |
Domyślny styl operacji CAST i dla typów danych CONVERT i daty/godziny2 to 121, z wyjątkiem sytuacji, gdy w wyrażeniu kolumny obliczeniowej jest używany dowolny typ. W przypadku kolumn obliczanych domyślny styl to 0. To zachowanie ma wpływ na obliczone kolumny podczas ich tworzenia, używane w zapytaniach obejmujących autoparametryzację lub używane w definicjach ograniczeń.Przykład D w sekcji Przykłady pokazuje różnicę między stylami 0 i 121. Nie demonstruje to zachowania opisanego powyżej. Aby uzyskać więcej informacji na temat stylów daty i godziny , zobacz CAST i CONVERT. |
W obszarze poziom zgodności 110 domyślny styl dla CAST CONVERT typów danych i operacji w typach danych data/godzina i data/godzina2 to zawsze 121. Jeśli zapytanie opiera się na starym zachowaniu, użyj poziomu zgodności mniejszego niż 110 lub jawnie określ styl 0 w zapytaniu, którego dotyczy problem.Uaktualnienie bazy danych do poziomu zgodności 110 nie spowoduje zmiany danych użytkownika przechowywanych na dysku. Należy ręcznie poprawić te dane zgodnie z potrzebami. Jeśli na przykład użyto SELECT INTO metody do utworzenia tabeli ze źródła zawierającego obliczone wyrażenie kolumny opisane powyżej, dane (przy użyciu stylu 0) będą przechowywane zamiast samej definicji kolumny obliczeniowej. Należy ręcznie zaktualizować te dane, aby dopasować styl 121. |
Operator + (Dodawanie) można zastosować do operandu typu data, godzina, data/godzina2 lub datetimeoffset, jeśli inny operand ma typ datetime lub smalldatetime. | Próba zastosowania operatora dodawania do operandu typu data, godzina, data/godzina2 lub datetimeoffset oraz operand typu datetime lub smalldatetime spowoduje błąd 402. |
Wszystkie kolumny w tabelach zdalnych typu smalldatetime , do których odwołuje się widok partycjonowany, są mapowane jako data/godzina. Odpowiednie kolumny w tabelach lokalnych (w tej samej pozycji porządkowej na liście wyboru) muszą być typu data/godzina. | Wszystkie kolumny w tabelach zdalnych typu smalldatetime , do których odwołuje się widok partycjonowany, są mapowane jako smalldatetime. Odpowiadające kolumny w tabelach lokalnych (w tej samej pozycji porządkowej na liście wyboru) muszą mieć typ smalldatetime. Po uaktualnieniu do wersji 110 rozproszony widok partycjonowany zakończy się niepowodzeniem z powodu niezgodności typu danych. Można rozwiązać ten problem, zmieniając typ danych w tabeli zdalnej na datetime lub ustawiając poziom zgodności lokalnej bazy danych na 100 lub niższy. |
SOUNDEX funkcja implementuje następujące reguły:1) Wielkie litery H lub wielkie litery W są ignorowane podczas oddzielania dwóch spółgłosek, które mają tę samą liczbę w SOUNDEX kodzie.2) Jeśli pierwsze dwa znaki character_expression mają taką samą liczbę w SOUNDEX kodzie, oba znaki są uwzględniane. W przeciwnym razie, jeśli zestaw spółgłosek side-by-side ma taką samą liczbę w SOUNDEX kodzie, wszystkie z nich są wykluczone z wyjątkiem pierwszej. |
SOUNDEX funkcja implementuje następujące reguły:1) Jeśli wielkie litery H lub wielkie litery W oddzielają dwa spółgłoski, które mają ten sam numer w SOUNDEX kodzie, spółgłos z prawej strony jest ignorowany2) Jeśli zestaw spółgłosek side-by-side ma taką samą liczbę w SOUNDEX kodzie, wszystkie z nich są wykluczone z wyjątkiem pierwszego.Dodatkowe reguły mogą spowodować, że wartości obliczone przez SOUNDEX funkcję będą inne niż wartości obliczone na wcześniejszych poziomach zgodności. Po uaktualnieniu do poziomu zgodności 110 może być konieczne ponowne skompilowanie indeksów, stert lub ograniczeń CHECK korzystających z SOUNDEX funkcji. Aby uzyskać więcej informacji, zobacz SOUNDEX. |
STRING_AGG jest dostępny bez elementu <order_clause> . |
STRING_AGG jest dostępny z opcjonalnym <order_clause> elementem . Aby uzyskać więcej informacji, zobacz STRING_AGG |
Różnice między poziomem zgodności 90 i poziomem 100
W tej sekcji opisano nowe zachowania wprowadzone na poziomie zgodności 100.
Ustawienie poziomu zgodności 90 | Ustawienie poziomu zgodności 100 | Możliwość wpływu |
---|---|---|
Ustawienie QUOTED_IDENTIFIER jest zawsze ustawione na WARTOŚĆ WŁĄCZONE dla funkcji wielostanowych w przypadku tworzenia ich niezależnie od ustawienia poziomu sesji. | Ustawienie sesji identyfikatora cytowanego jest honorowane po utworzeniu funkcji wielostanowych w tabelach. | Średni |
Podczas tworzenia lub zmieniania funkcji partycji literały datetime i smalldatetime w funkcji są oceniane przy założeniu, że US_English jako ustawienie języka. | Bieżące ustawienie języka służy do oceniania literałów datetime i smalldatetime w funkcji partycji. | Średni |
Klauzula jest dozwolona FOR BROWSE (i ignorowana) w INSERT instrukcjach i SELECT INTO . |
Klauzula nie jest dozwolona FOR BROWSE w INSERT instrukcjach i .SELECT INTO |
Średni |
Predykaty pełnotekstowe są dozwolone w klauzuli OUTPUT . |
Predykaty pełnotekstowe nie są dozwolone w klauzuli OUTPUT . |
Niski |
CREATE FULLTEXT STOPLIST , ALTER FULLTEXT STOPLIST i DROP FULLTEXT STOPLIST nie są obsługiwane. Lista zatrzymań systemu jest automatycznie skojarzona z nowymi indeksami pełnotekstowymi. |
CREATE FULLTEXT STOPLIST , ALTER FULLTEXT STOPLIST i DROP FULLTEXT STOPLIST są obsługiwane. |
Niski |
MERGE nie jest wymuszany jako zastrzeżone słowo kluczowe. |
MERGE to w pełni zarezerwowane słowo kluczowe. Instrukcja jest obsługiwana MERGE zarówno na poziomie zgodności 100, jak i 90. |
Niski |
<dml_table_source> Użycie argumentu instrukcji INSERT zgłasza błąd składniowy. |
Wyniki klauzuli OUTPUT można przechwycić w zagnieżdżonej instrukcji INSERT, UPDATE, DELETE lub MERGE, a następnie wstawić te wyniki do tabeli docelowej lub widoku. Odbywa się to przy użyciu <dml_table_source> argumentu instrukcji INSERT. |
Niski |
O ile nie NOINDEX zostanie określony, DBCC CHECKDB lub DBCC CHECKTABLE wykonuje zarówno testy spójności fizycznej, jak i logicznej dla pojedynczej tabeli lub widoku indeksowanego oraz na wszystkich indeksach nieklastrowanych i XML. Indeksy przestrzenne nie są obsługiwane. |
O ile nie NOINDEX zostanie określony, DBCC CHECKDB lub DBCC CHECKTABLE wykonuje zarówno testy spójności fizycznej, jak i logicznej dla pojedynczej tabeli i we wszystkich indeksach nieklastrowanych. Jednak w przypadku indeksów XML, indeksów przestrzennych i widoków indeksowanych domyślnie wykonywane są tylko testy spójności fizycznej.Jeśli WITH EXTENDED_LOGICAL_CHECKS zostanie określony, kontrole logiczne są wykonywane na indeksowanych widokach, indeksach XML i indeksach przestrzennych, gdzie są obecne. Domyślnie testy spójności fizycznej są wykonywane przed sprawdzaniem spójności logicznej. Jeśli NOINDEX jest również określona, są wykonywane tylko testy logiczne. |
Niski |
Gdy klauzula OUTPUT jest używana z instrukcją języka manipulowania danymi (DML), a podczas wykonywania instrukcji występuje błąd czasu wykonywania, cała transakcja zostanie zakończona i wycofana. | Gdy klauzula OUTPUT jest używana z instrukcją języka manipulowania danymi (DML), a podczas wykonywania instrukcji występuje błąd czasu wykonywania, zachowanie zależy od SET XACT_ABORT ustawienia. Jeśli SET XACT_ABORT wartość jest wyłączona, instrukcja przerwać błąd wygenerowany przez instrukcję DML przy użyciu OUTPUT klauzuli zakończy instrukcję, ale wykonanie partii będzie kontynuowane i transakcja nie zostanie wycofana. Jeśli SET XACT_ABORT wartość jest włączona, wszystkie błędy czasu wykonywania generowane przez instrukcję DML przy użyciu klauzuli OUTPUT zakończą partię, a transakcja zostanie wycofana. |
Niski |
Funkcja CUBE i ROLLUP nie są wymuszane jako zastrzeżone słowa kluczowe. |
CUBE i ROLLUP są słowami kluczowymi zarezerwowanymi w klauzuli GROUP BY. |
Niski |
Ścisła walidacja jest stosowana do elementów typu anyType XML. | Walidacja lax jest stosowana do elementów typu anyType . Aby uzyskać więcej informacji, zobacz Składniki wieloznaczne i walidacja zawartości. | Niski |
Atrybuty specjalne xsi:nil i xsi:type nie mogą być odpytywane ani modyfikowane przez instrukcje języka manipulowania danymi. Oznacza to, że /e/@xsi:nil kończy się niepowodzeniem, ignorując /e/@* atrybuty xsi:nil i xsi:type .
/e Jednak zwraca atrybuty xsi:nil i xsi:type dla spójności z parametrem SELECT xmlCol , nawet jeśli xsi:nil = "false" . |
Atrybuty specjalne xsi:nil i xsi:type są przechowywane jako zwykłe atrybuty i mogą być odpytywane i modyfikowane. Na przykład wykonanie zapytania SELECT x.query('a/b/@*') zwraca wszystkie atrybuty, w tym xsi:nil i xsi:type. Aby wykluczyć te typy w zapytaniu, zastąp @* ciąg @*[namespace-uri(.) != " wstaw identyfikator URI" przestrzeni nazw xsi, a nie (local-name(.) = "type" lub local-name(.) ="nil" . |
Niski |
Funkcja zdefiniowana przez użytkownika, która konwertuje wartość ciągu stałego XML na typ daty/godziny programu SQL Server, jest oznaczona jako deterministyczna. | Funkcja zdefiniowana przez użytkownika, która konwertuje wartość ciągu stałego XML na typ daty/godziny programu SQL Server, jest oznaczona jako niedeterministyczna. | Niski |
Typy unii i list XML nie są w pełni obsługiwane. | Typy union i list są w pełni obsługiwane, w tym następujące funkcje: Unia listy Unia Unii Lista typów niepodzielnych Lista unii |
Niski |
Opcje SET wymagane dla metody xQuery nie są weryfikowane, gdy metoda jest zawarta w widoku lub wbudowanej funkcji wartości tabeli. | Opcje SET wymagane dla metody xQuery są weryfikowane, gdy metoda jest zawarta w widoku lub wbudowanej funkcji wartości tabeli. Błąd jest zgłaszany, jeśli opcje SET metody są ustawione niepoprawnie. | Niski |
Wartości atrybutów XML, które zawierają znaki końca wiersza (powrotu karetki i kanału informacyjnego wiersza) nie są znormalizowane zgodnie ze standardem XML. Oznacza to, że oba znaki są zwracane zamiast pojedynczego znaku kanału informacyjnego. | Wartości atrybutów XML, które zawierają znaki końca wiersza (powrotu karetki i kanału informacyjnego wiersza) są znormalizowane zgodnie ze standardem XML. Oznacza to, że wszystkie podziały wierszy w jednostkach analizowanych zewnętrznych (w tym jednostka dokumentu) są znormalizowane na danych wejściowych przez tłumaczenie zarówno dwuznakowej sekwencji #xD #xA, jak i wszystkich #xD, po których nie następuje #xA do pojedynczego znaku #xA. Aplikacje, które używają atrybutów do transportu wartości ciągów zawierających znaki końca wiersza, nie będą otrzymywać tych znaków z powrotem, ponieważ są przesyłane. Aby uniknąć procesu normalizacji, użyj jednostek znaków liczbowych XML, aby zakodować wszystkie znaki końca wiersza. |
Niski |
Właściwości ROWGUIDCOL kolumny i IDENTITY mogą być niepoprawnie nazwane jako ograniczenie. Na przykład instrukcja CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) jest wykonywana, ale nazwa ograniczenia nie jest zachowywana i nie jest dostępna dla użytkownika. |
Właściwości ROWGUIDCOL kolumny i IDENTITY nie mogą być nazwane jako ograniczenie. Zwracany jest błąd 156. |
Niski |
Aktualizowanie kolumn przy użyciu przypisania dwukierunkowego, takiego jak UPDATE T1 SET @v = column_name = <expression> może spowodować nieoczekiwane wyniki, ponieważ wartość dynamiczna zmiennej może być używana w innych klauzulach, takich jak WHERE klauzula i ON podczas wykonywania instrukcji zamiast wartości początkowej instrukcji. Może to spowodować zmianę znaczenia predykatów w sposób nieprzewidywalny dla poszczególnych wierszy.To zachowanie ma zastosowanie tylko wtedy, gdy poziom zgodności jest ustawiony na 90. |
Aktualizowanie kolumn przy użyciu przypisania dwukierunkowego powoduje wygenerowanie oczekiwanych wyników, ponieważ podczas wykonywania instrukcji uzyskuje się dostęp tylko do instrukcji. | Niski |
Przypisanie zmiennej jest dozwolone w instrukcji zawierającej operator najwyższego poziomu UNION , ale zwraca nieoczekiwane wyniki. Dowiedz się więcej w przykładzie E. |
Przypisanie zmiennej nie jest dozwolone w instrukcji zawierającej operator UNION najwyższego poziomu. Zwracany jest błąd 10734. Znajdź sugerowane ponowne zapisywanie w przykładzie E. | Niski |
Funkcja ODBC {fn CONVERT()} używa domyślnego formatu daty języka. W przypadku niektórych języków domyślnym formatem jest YDM, co może spowodować błędy konwersji, gdy funkcja CONVERT() jest połączona z innymi funkcjami, takimi jak {fn CURDATE()} , które oczekują formatu YMD. |
Funkcja {fn CONVERT()} ODBC używa stylu 121 (niezależnego od języka formatu YMD) podczas konwertowania na typy danych ODBC SQL_TIMESTAMP, SQL_DATE, SQL_TIME, SQLDATE, SQL_TYPE_TIME i SQL_TYPE_TIMESTAMP. |
Niski |
Funkcje wewnętrzne daty/godziny, takie jak DATEPART nie wymagają, aby wartości wejściowe ciągu być prawidłowymi literałami daty/godziny. Na przykład SELECT DATEPART (year, '2007/05-30') kompiluje się pomyślnie. |
Funkcje wewnętrzne daty/godziny, takie jak DATEPART wymagaj, aby wartości wejściowe ciągu być prawidłowymi literałami daty/godziny. Błąd 241 jest zwracany, gdy jest używany nieprawidłowy literał daty/godziny. |
Niski |
Spacje końcowe określone w pierwszym parametrze wejściowym funkcji REPLACE są przycinane, gdy parametr jest typu char. Na przykład w instrukcji SELECT '<' + REPLACE(CONVERT(char(6), 'ABC '), ' ', 'L') + '>' wartość 'ABC ' jest niepoprawnie obliczana jako 'ABC' . |
Spacje końcowe są zawsze zachowywane. W przypadku aplikacji, które opierają się na poprzednim zachowaniu funkcji, użyj RTRIM funkcji podczas określania pierwszego parametru wejściowego dla funkcji. Na przykład następująca składnia odtworzy zachowanie programu SQL Server 2005: SELECT '<' + REPLACE(RTRIM(CONVERT(char(6), 'ABC ')), ' ', 'L') + '>' . |
Niski |
Zastrzeżone słowa kluczowe
Ustawienie zgodności określa również słowa kluczowe zarezerwowane przez aparat bazy danych. W poniższej tabeli przedstawiono zastrzeżone słowa kluczowe, które są wprowadzane przez każdy z poziomów zgodności.
Ustawienie poziomu zgodności | Zastrzeżone słowa kluczowe |
---|---|
130 |
Do ustalenia. |
120 |
Żaden. |
110 |
WITHIN GROUP , , TRY_CONVERT , SEMANTICKEYPHRASETABLE , , SEMANTICSIMILARITYDETAILSTABLE SEMANTICSIMILARITYTABLE |
100 |
CUBE , , MERGE ROLLUP |
90 |
EXTERNAL , , PIVOT , UNPIVOT , , REVERT TABLESAMPLE |
Na danym poziomie zgodności zastrzeżone słowa kluczowe obejmują wszystkie słowa kluczowe wprowadzone na poziomie lub poniżej tego poziomu. Na przykład w przypadku aplikacji na poziomie 110 wszystkie słowa kluczowe wymienione w powyższej tabeli są zastrzeżone. Na niższych poziomach zgodności słowa kluczowe poziom-100 pozostają prawidłowymi nazwami obiektów, ale funkcje języka level-110 odpowiadające tym kluczowym są niedostępne.
Po wprowadzeniu słowo kluczowe pozostaje zastrzeżone. Na przykład zarezerwowane słowo kluczowe PIVOT wprowadzone w poziomie zgodności 90 jest również zarezerwowane na poziomach 100, 110 i 120.
Jeśli aplikacja używa identyfikatora zarezerwowanego jako słowa kluczowego dla poziomu zgodności, aplikacja zakończy się niepowodzeniem. Aby obejść ten temat, należy ująć identyfikator między nawiasami kwadratowymi ([]) lub cudzysłowami (""); na przykład, aby uaktualnić aplikację, która używa identyfikatora EXTERNAL
do poziomu zgodności 90, można zmienić identyfikator na [EXTERNAL]
lub "EXTERNAL"
.
Aby uzyskać więcej informacji, zobacz Zastrzeżone słowa kluczowe.
Uprawnienia
Wymaga uprawnienia ALTER
do bazy danych.
Przykłady
Odp. Zmienianie poziomu zgodności
Poniższy przykład zmienia poziom zgodności przykładowej AdventureWorks2022
bazy danych na 150, czyli domyślny dla programu SQL Server 2019 (15.x).
ALTER DATABASE AdventureWorks2022
SET COMPATIBILITY_LEVEL = 150;
GO
Poniższy przykład zwraca poziom zgodności bieżącej bazy danych.
SELECT name,
compatibility_level
FROM sys.databases
WHERE name = db_name();
GO
B. Ignoruj instrukcję SET LANGUAGE z wyjątkiem poziomu zgodności 120 lub nowszego
Poniższe zapytanie ignoruje instrukcję SET LANGUAGE
z wyjątkiem poziomu zgodności 120 lub nowszego.
SET DATEFORMAT dmy;
DECLARE @t2 AS DATE = '12/5/2011';
SET LANGUAGE dutch;
SELECT CONVERT (VARCHAR (11), @t2, 106);
GO
Wyniki, gdy poziom zgodności jest mniejszy niż 120: 12 May 2011
Wyniki, gdy poziom zgodności jest ustawiony na 120 lub wyższy: 12 mei 2011
C. W przypadku ustawienia poziomu zgodności 110 lub niższego cykliczne odwołania po prawej stronie klauzuli EXCEPT tworzą pętlę nieskończoną
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. Różnica między stylami 0 i 121
Jeśli poziom zgodności jest niższy niż 110, domyślny styl dla CAST
operacji i operacji w typach danych CONVERT
datetime2 wynosi 121, z wyjątkiem sytuacji, gdy w wyrażeniu kolumny obliczeniowej jest używany dowolny typ. W przypadku kolumn obliczanych domyślny styl to 0.
Jeśli poziom zgodności wynosi 110 lub wyższy, domyślny styl dla CAST
CONVERT
typów danych i operacji w typach danych data/godzina i godzina2 to zawsze 121. Aby uzyskać więcej informacji, zobacz Różnice między niższymi poziomami zgodności i poziomami 100 i 110 .
Aby uzyskać więcej informacji na temat stylów daty i godziny, zobacz CAST i 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
Spowoduje to zwrócenie wyników, takich jak następujące:
TimeStyle0 | TimeStyle121 | Datetime2Style0 | Datetime2Style121 |
---|---|---|---|
15:15 | 15:15:35.8100000 | Czerwiec 7 2011 17:15 | 2011-06-07 15:15:35.8130000 |
E. Przypisanie zmiennej — operator UNION najwyższego poziomu
Zgodnie z ustawieniem poziomu zgodności bazy danych 90 przypisanie zmiennej jest dozwolone w instrukcji zawierającej operator UNII najwyższego poziomu, ale zwraca nieoczekiwane wyniki. Na przykład w poniższych instrukcjach zmienna @v
lokalna jest przypisywana wartość kolumny BusinessEntityID
z unii dwóch tabel. Z definicji, gdy instrukcja SELECT zwraca więcej niż jedną wartość, zmienna jest przypisywana ostatniej zwracanej wartości. W takim przypadku zmienna jest poprawnie przypisana ostatniej wartości, jednak zwracany jest również zestaw wyników instrukcji SELECT UNION.
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;
Zgodnie z ustawieniem poziomu zgodności bazy danych 100 lub nowszym przypisanie zmiennej nie jest dozwolone w instrukcji zawierającej operator UNII najwyższego poziomu. Zwracany jest błąd 10734.
Aby rozwiązać ten problem, zapisz ponownie zapytanie, jak pokazano w poniższym przykładzie.
DECLARE @v AS INT;
SELECT @v = BusinessEntityID
FROM (SELECT BusinessEntityID
FROM HumanResources.Employee
UNION ALL
SELECT BusinessEntityID
FROM HumanResources.EmployeeAddress) AS Test;
SELECT @v;
Treści powiązane
- Zachowaj stabilność wydajności podczas uaktualniania do nowszego programu SQL Server
- Zmienianie poziomu zgodności bazy danych i używanie magazynu zapytań
- certyfikat zgodności
- ALTER DATABASE (Transact-SQL)
- Uaktualnianie baz danych przy użyciu Asystenta dostrajania zapytań
- TWORZENIE BAZY DANYCH
- Wyświetlanie lub zmienianie poziomu zgodności bazy danych
- Wskazówki dotyczące Magazynu Zapytań