Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
A rendezési elsőbbség, más néven a rendezési kényszerítési szabályok a következő két eredményt határozzák meg:
Egy karaktersztringre kiértékelt kifejezés végeredményének rendezése.
A rendezésérzékeny operátorok által használt rendezés, amelyek karaktersztring-bemeneteket használnak, de nem adnak vissza karaktersztringet, például
LIKEIN értéket.
A rendezési szabályok csak a karaktersztring adattípusára vonatkoznak: karakter, varchar, szöveg, nchar, nvarchar és ntext. A más adattípusokkal rendelkező objektumok nem vesznek részt a rendezési értékelésekben.
Rendezési címkék
Az alábbi táblázat felsorolja és ismerteti azt a négy kategóriát, amelyekben az összes objektum rendezése azonosítható. Az egyes kategóriák neve a rendezési címke.
| Rendezési címke | Objektumtípusok |
|---|---|
Coercible-default |
Bármely Transact-SQL karaktersztring-változó, paraméter, konstans vagy katalógus beépített függvényének kimenete, vagy olyan beépített függvény, amely nem fogad sztringbemeneteket, de sztringkimenetet hoz létre. Ha az objektum felhasználó által definiált függvényben, tárolt eljárásban vagy eseményindítóban van deklarálva, az objektumhoz annak az adatbázisnak az alapértelmezett rendezése lesz hozzárendelve, amelyben a függvény, a tárolt eljárás vagy az eseményindító létrejön. Ha az objektumot kötegben deklarálják, a rendszer az objektumhoz rendeli hozzá az aktuális adatbázis alapértelmezett rendezést a kapcsolathoz. |
Implicit X |
Oszlophivatkozás. A kifejezés (X) rendezése a táblázat vagy nézet oszlopához definiált rendezésből származik. Az oszlophivatkozás akkor is implicitként lesz besorolva, ha az oszlopot explicit módon hozzárendelték egy rendezéshez egy COLLATE záradék vagy CREATE TABLE utasítás használatávalCREATE VIEW. |
Explicit X |
Egy kifejezés, amely explicit módon egy adott rendezési (X) rendezésbe kerül a kifejezés egyik COLLATE záradékával. |
No-collation |
Azt jelzi, hogy egy kifejezés értéke két sztring közötti művelet eredménye, amelyek ütköző rendezési címkével rendelkeznek. A kifejezés eredménye úgy van definiálva, hogy nincs rendezés. |
Rendezési szabályok
Egy egyszerű kifejezés rendezési címkéje, amely csak egy karakteres sztringobjektumra hivatkozik, a hivatkozott objektum rendezési címkéje.
Egy olyan összetett kifejezés rendezési címkéje, amely két azonos rendezési címkével rendelkező operandus-kifejezésre hivatkozik, az operandus-kifejezések rendezési címkéje.
Egy összetett kifejezés végeredményének rendezési címkéje, amely két különböző rendezésű operandus kifejezésre hivatkozik, az alábbi szabályokon alapul:
Az explicit elsőbbséget élvez az implicitel szemben. Az Implicit elsőbbséget élvez a Coercible-default értéknél:
Explicit > Implicit > Coercible-default
Ha két explicit kifejezést kombinál, amelyek különböző rendezéseket kaptak, hibát okoz:
Explicit X + Explicit Y = hiba
Ha két implicit kifejezést kombinál, amelyek különböző rendezésekkel rendelkeznek, a no-collation eredményt ad:
Implicit X + Implicit Y = Nincs rendezés
Ha egy kifejezést nem rendezéssel kombinál bármely címke kifejezésével, kivéve az explicit rendezést (lásd a következő szabályt), a no-collation címkével rendelkező eredményt ad:
Nem-összeállítás + bármi = Nem-összeállítás
Ha egy kifejezést nem rendezéssel kombinál egy explicit rendezéssel rendelkező kifejezéssel, explicit címkével ad egy kifejezést:
Rendezés nélküli + Explicit X = Explicit
Az alábbi táblázat összefoglalja a szabályokat.
| Operandus kényszerítő címke | Explicit X | Implicit X | Kényszeríthető alapértelmezett | Rendezés nélküli |
|---|---|---|---|---|
Explicit Y |
Hibát generál | Az eredmény explicit Y | Az eredmény explicit Y | Az eredmény explicit Y |
Implicit Y |
Az eredmény explicit X | Az eredmény nem rendezés | Az eredmény implicit Y | Az eredmény nem rendezés |
Coercible-default |
Az eredmény explicit X | Az eredmény implicit X | Az eredmény coercible-default | Az eredmény nem rendezés |
No-collation |
Az eredmény explicit X | Az eredmény nem rendezés | Az eredmény nem rendezés | Az eredmény nem rendezés |
A rendezési sorrendre a következő további szabályok vonatkoznak:
Egy már explicit kifejezésnek számító kifejezésen nem lehet több
COLLATEzáradék. A következőWHEREzáradék például nem érvényes, mert egyCOLLATEolyan kifejezéshez van megadva záradék, amely már explicit kifejezés:WHERE ColumnA = ( 'abc' COLLATE French_CI_AS) COLLATE French_CS_ASA szöveges adattípusok kódlap-konvertálása nem engedélyezett. Ha különböző kódlapokat tartalmaz, nem lehet szöveges kifejezést leadni az egyik rendezésből a másikba. A hozzárendelési operátor nem tud értékeket hozzárendelni, ha a jobb oldali szöveg operandusának rendezése eltérő kódlaplal rendelkezik, mint a bal oldali szövegoperátor.
A rendszer az adattípus-átalakítás után határozza meg a rendezés elsőbbséget. Az operandus, amelyből az eredményként kapott rendezés történik, eltérhet a végeredmény adattípusát biztosító operandustól. Vegyük például a következő köteget:
CREATE TABLE TestTab
(
PrimaryKey INT PRIMARY KEY,
CharCol CHAR (10) COLLATE French_CI_AS
);
SELECT *
FROM TestTab
WHERE CharCol LIKE N'abc';
Megjegyzés:
A Hálóraktár nem támogatja az nvarchar adattípust, de a jelen cikkben szereplő legtöbb példa az UTF-8 és az nvarchar használatával készült varcharra egyaránt alkalmazható, így a Fabric Warehouse-ra is alkalmazható marad, kivéve, ha másként van feltüntetve.
Az egyszerű kifejezés N'abc' Unicode-adattípusa magasabb adattípus-elsőbbséget élvez. Ezért az eredményként kapott kifejezéshez Unicode-adattípus van hozzárendelve N'abc'. A kifejezés CharCol azonban implicit rendezési címkével rendelkezik, és N'abc' alacsonyabb kényszerítési címkével rendelkezik, mint a Coercible-default. Ezért a használt rendezés a French_CI_AS .CharCol
Példák rendezési szabályokra
Az alábbi példák bemutatják a rendezési szabályok működését. A példák futtatásához hozza létre a következő teszttáblát.
USE tempdb;
GO
CREATE TABLE TestTab
(
id INT,
GreekCol NVARCHAR (10) COLLATE greek_ci_as,
LatinCol NVARCHAR (10) COLLATE latin1_general_cs_as
);
INSERT TestTab
VALUES (1, N'A', N'a');
GO
Rendezési ütközés és hiba
A következő lekérdezés predikátumában rendezési ütközés van, és hibát okoz.
SELECT *
FROM TestTab
WHERE GreekCol = LatinCol;
Itt van az eredmények összessége.
Msg 448, Level 16, State 9, Line 2
Cannot resolve collation conflict between 'Latin1_General_CS_AS' and 'Greek_CI_AS' in equal to operation.
Explicit címke és implicit címke
A következő lekérdezés predikátumát rendezésben greek_ci_as értékeli ki a rendszer, mert a megfelelő kifejezés explicit címkével rendelkezik. Ez elsőbbséget élvez a bal oldali kifejezés implicit címkével szemben.
SELECT *
FROM TestTab
WHERE GreekCol = LatinCol COLLATE greek_ci_as;
Itt van az eredmények összessége.
id GreekCol LatinCol
----------- -------------------- --------------------
1 A a
Rendezés nélküli címkék
Megjegyzés:
A nvarchar és a varchar viselkedése közötti különbség miatt az UTF-8 rendezésben ez a példa nem érvényes a Fabric Warehouse-ban.
Az CASE alábbi lekérdezések kifejezései nem rendezési címkével rendelkeznek, ezért nem jelennek meg a kiválasztási listában, és nem kezelhetők rendezésérzékeny operátorokkal. A kifejezések azonban rendezési érzéketlen operátorokkal is működtethetők.
SELECT (CASE WHEN id > 10 THEN GreekCol ELSE LatinCol END)
FROM TestTab;
Itt van az eredmények összessége.
Msg 451, Level 16, State 1, Line 1
Cannot resolve collation conflict for column 1 in SELECT statement.
SELECT PATINDEX((CASE WHEN id > 10 THEN GreekCol ELSE LatinCol END), 'a')
FROM TestTab;
Itt van az eredmények összessége.
Msg 446, Level 16, State 9, Server LEIH2, Line 1
Cannot resolve collation conflict for patindex operation.
SELECT (CASE WHEN id > 10 THEN GreekCol ELSE LatinCol END) COLLATE Latin1_General_CI_AS
FROM TestTab;
Itt van az eredmények összessége.
--------------------
a
Rendezés érzékeny és rendezés érzéketlen
Az operátorok és a függvények rendezésérzékenyek vagy érzéketlenek.
- Rendezésérzékeny: Ez azt jelenti, hogy a no-collation operandus megadása fordítási idejű hiba. A kifejezés eredménye nem lehet rendezés nélküli.
- Rendezés érzéketlen: Ez azt jelenti, hogy az operandusok és az eredmény lehet No-collation.
Operátorok és rendezés
Az összehasonlító operátorok, valamint a MAX, MIN, BETWEEN, LIKEés IN operátorok megkülönböztetik a rendezést. Az operátorok által használt sztring a magasabb elsőbbséget élvező operandus rendezési címkéjét kapja. Az UNION utasítás a rendezésre is érzékeny, és az összes sztringoperndus és a végeredmény az operandus rendezési sorrendjét rendeli hozzá a legmagasabb prioritással. Az operandus és az UNION eredmény rendezési sorrendjét oszloponként értékeli ki a rendszer.
A hozzárendelési operátor nem érzéketlen a rendezéshez, a jobb oldali kifejezés pedig a bal rendezésbe kerül.
A sztringösszefűzési operátor megkülönbözteti a rendezést, a két sztringoperndus és az eredmény az operandus rendezési címkéjét rendeli hozzá a legmagasabb rendezési prioritással. Az UNION ALL és CASE az utasítások rendezési érzéketlenek, és az összes sztringoperndus és a végső eredmények az operandus rendezési címkéjét kapják a legmagasabb prioritással. Az operandusok és az UNION ALL eredmények rendezési sorrendjét oszloponként értékeli ki a rendszer.
Függvények és rendezés
A CAST, CONVERTés COLLATE függvények megkülönböztetik a karakter, a varchar és a szöveg adattípusokat. Ha a függvények bemenete és CAST kimenete CONVERT karaktersztring, akkor a kimeneti sztring a bemeneti sztring rendezési címkéjét tartalmazza. Ha a bemenet nem karaktersztring, a kimeneti sztring coercible alapértelmezett, és hozzárendelte a kapcsolat aktuális adatbázisának rendezést, vagy a felhasználó által definiált függvényt, tárolt eljárást vagy eseményindítót tartalmazó adatbázist, amelyben az CAST vagy CONVERT arra hivatkozik.
Azon beépített függvények esetében, amelyek sztringet adnak vissza, de nem vesznek fel sztringbemenetet, az eredménysztring alapértelmezés szerint Coercible. Az eredménysztring vagy az aktuális adatbázis rendezése, vagy a felhasználó által definiált függvényt, tárolt eljárást vagy eseményindítót tartalmazó adatbázis rendezése, amelyre a függvény hivatkozik.
A következő függvények rendezésérzékenyek, a kimeneti sztringek pedig a bemeneti sztring rendezési címkéjét használják:
CHARINDEXDIFFERENCEISNUMERICLEFTLENLOWERPATINDEXREPLACEREVERSERIGHTSOUNDEXSTUFFSUBSTRINGUPPER