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 lekérdezés által visszaadott adatokat az SQL Serveren rendezi. Használja ezt a záradékot a következőre:
Rendelje meg a lekérdezés eredményhalmazát a megadott oszloplista szerint, és igény szerint korlátozza a megadott tartományba visszaadott sorokat. Az eredményhalmazban visszaadott sorok sorrendje nem garantált, hacsak nincs megadva záradék
ORDER BY.Határozza meg, hogy a rangsorolási függvény értékei milyen sorrendben legyenek alkalmazva az eredményhalmazra.
Transact-SQL szintaxis konvenciók
Note
ORDER BY az Azure Synapse Analytics vagy az Analytics Platform System (PDW) nem támogatja SELECT/INTO a CREATE TABLE AS SELECT CTAS-utasításokat.
Syntax
Az SQL Server és az Azure SQL Database szintaxisa.
ORDER BY order_by_expression
[ COLLATE collation_name ]
[ ASC | DESC ]
[ , ...n ]
[ <offset_fetch> ]
<offset_fetch> ::=
{
OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
[
FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
]
}
Az Azure Synapse Analytics and Analytics Platform System (PDW) szintaxisa:
[ ORDER BY
{
order_by_expression
[ ASC | DESC ]
} [ , ...n ]
]
Arguments
order_by_expression
Megadja azt az oszlopot vagy kifejezést, amelyen rendezni szeretné a lekérdezés eredményhalmazát. Megadhat egy rendezési oszlopot névként vagy oszlop aliasaként, vagy nem negatív egész számként, amely az oszlop helyét jelöli a kijelölési listában.
Több rendezési oszlopot is megadhat. Az oszlopneveknek egyedinek kell lenniük. A záradék rendezési ORDER BY oszlopainak sorrendje határozza meg a rendezett eredményhalmaz szervezetét. Az eredményhalmazt az első oszlop rendezi, majd a rendezett listát a második oszlop rendezi, és így tovább.
A záradékban ORDER BY hivatkozott oszlopneveknek kétértelműség nélkül meg kell felelnie a kijelölési listában szereplő oszlopnak vagy oszlop aliasának, illetve a FROM záradékban megadott táblában meghatározott oszlopnak. Ha a ORDER BY záradék egy oszlop aliasára hivatkozik a kijelölési listából, használja önállóan az oszlop aliasát. Ne használja az oszlop aliasát a ORDER BY záradék kifejezésének részeként.
Például:
Helyes használat:
SELECT SCHEMA_NAME(schema_id) AS SchemaName FROM sys.objects ORDER BY SchemaName; -- correctHelytelen használat:
SELECT SCHEMA_NAME(schema_id) AS SchemaName FROM sys.objects ORDER BY SchemaName + ''; -- wrong
COLLATION_NAME RENDEZÉSE
Azt határozza meg, hogy a műveletet a ORDER BYcollation_name megadott rendezésnek megfelelően kell végrehajtani, és nem a táblázatban vagy nézetben meghatározott oszlop rendezése szerint. A collation_name lehet Windows-rendezési név vagy SQL-rendezés neve. További információ: összehasonlítási szabályok és Unicode-támogatás.
COLLATE csak karakteres, varchar, ncharés nvarcharoszlopra alkalmazható.
ASC | DESC
Megadja, hogy a megadott oszlop értékeit növekvő vagy csökkenő sorrendbe kell rendezni.
ASC rendezés a legalacsonyabb értékről a legmagasabb értékre.
DESC rendezés a legmagasabb értékről a legalacsonyabb értékre.
ASC az alapértelmezett rendezési sorrend.
NULL értékeket a rendszer a lehető legalacsonyabb értékként kezeli.
ELTOLÁS { integer_constant | offset_row_count_expression } { SOR | SOROK }
A következőkre vonatkozik: SQL Server 2012 (11.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány.
Megadja a kihagyandó sorok számát, mielőtt a lekérdezés sorokat ad vissza a lekérdezési kifejezésből. Az érték lehet olyan egész számállandó vagy kifejezés, amely nullánál nagyobb vagy egyenlő.
offset_row_count_expression lehet változó, paraméter vagy állandó skaláris alquery. Ha al lekérdezést használ, az nem hivatkozhat a külső lekérdezés hatókörében definiált oszlopokra. Vagyis nem lehet korrelálni a külső lekérdezéssel.
ROW szinonimák ROWS , és az ANSI-kompatibilitást biztosítják.
A lekérdezés-végrehajtási tervekben az eltolássorok száma a lekérdezési operátor Eltolás attribútumában TOP jelenik meg.
FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { SOR | SOROK } CSAK
A következőkre vonatkozik: SQL Server 2012 (11.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány.
Megadja a záradék feldolgozása után OFFSET visszaadandó sorok számát. Az érték lehet egy olyan egész számállandó vagy kifejezés, amely nagyobb vagy egyenlő egynél.
fetch_row_count_expression lehet változó, paraméter vagy állandó skaláris alquery. Ha al lekérdezést használ, az nem hivatkozhat a külső lekérdezés hatókörében definiált oszlopokra. Vagyis nem lehet korrelálni a külső lekérdezéssel.
FIRST szinonimák NEXT , és az ANSI-kompatibilitást biztosítják.
ROW szinonimák ROWS , és az ANSI-kompatibilitást biztosítják.
A lekérdezés-végrehajtási tervekben az eltolássorok száma a lekérdezési operátor Sorok vagy Felső attribútumában TOP jelenik meg.
Ajánlott eljárások
Ne adjon meg egész számokat a ORDER BY záradékban a kijelölési lista oszlopainak pozícióiként. Például, bár egy ilyen SELECT ProductID, Name FROM Production.Production ORDER BY 2 utasítás érvényes, a felhasználók nehezen értelmezhetők a tényleges oszlopnév megadásával összehasonlítva. Emellett a kijelölési lista módosítása ( például az oszlopsorrend módosítása vagy új oszlopok hozzáadása) megköveteli a záradék módosítását a ORDER BY váratlan eredmények elkerülése érdekében.
SELECT TOP (<n>) Egy utasításban mindig használjon záradékotORDER BY. Ez az egyetlen módja annak, hogy előre jelezze, mely sorok TOP érintik. További információ: TOP.
Interoperability
Ha ORDER BY egy vagy INSERT...SELECT több SELECT...INTO utasítással más forrásból származó sorokat szúr be, a ORDER BY záradék nem garantálja, hogy a sorok a megadott sorrendbe vannak beszúrva.
A nézet használata OFFSET és FETCH használata nem módosítja a nézet frissíthetőségi tulajdonságát.
Limitations
A záradékban ORDER BY nincs korlátozva az oszlopok száma. A záradékban ORDER BY megadott oszlopok teljes mérete azonban nem haladhatja meg a 8060 bájtot.
Záradékban nem használhat ntext, szöveg, kép, földrajzi hely, geometria vagy xml típusú oszlopokat ORDER BY .
Nem adhat meg egész számot vagy állandót, ha order_by_expression megjelenik egy rangsorolási függvényben. További információ: SELECT – OVER záradék.
Ha a FROM záradékban egy táblanevet aliasál, az aliasnévvel kell minősítenie a ORDER BY záradék oszlopait.
Ha az SELECT utasítás a következő záradékok vagy operátorok egyikét tartalmazza, a kijelölési listában meg kell határoznia a ORDER BY záradékban megadott oszlopneveket és aliasokat:
-
UNIONoperátor -
EXCEPToperátor -
INTERSECToperátor SELECT DISTINCT
Továbbá, ha az utasítás tartalmaz egy UNION, EXCEPTvagy INTERSECT operátort, az első (bal oldali) lekérdezés kiválasztási listájának meg kell adnia az oszlopneveket vagy az oszlop aliasait.
Egy , EXCEPTvagy INTERSECT operátort használó UNIONlekérdezésben csak az utasítás végén használhatóORDER BY. Ez a korlátozás csak akkor érvényes, ha egy legfelső szintű lekérdezést ad megUNION, EXCEPTINTERSECT és nem al lekérdezésben. Lásd a Példák szakaszt.
A ORDER BY záradék nem érvényes a nézetekben, a beágyazott függvényekben, a származtatott táblákban és az allekérdezésekben, kivéve, ha az vagy OFFSET a TOPFETCH záradékokat is megadja. Ha ezekben az objektumokban használjaORDER BY, a záradék csak a záradék vagy OFFSETFETCH záradékok által TOP visszaadott sorok meghatározására szolgál. A ORDER BY záradék nem garantálja a rendezett eredményeket, ha ezek a szerkezetek lekérdezve vannak, kivéve, ha ORDER BY magát a lekérdezést is megadja.
OFFSET és FETCH nem támogatottak az indexelt nézetekben vagy a CHECK OPTION záradék használatával definiált nézetben.
OFFSET és FETCH bármely olyan lekérdezésben használható, amely lehetővé teszi TOP és ORDER BY az alábbi korlátozásokkal:
A
OVERzáradék nem támogatja ésOFFSETnem támogatjaFETCHa .Nem adhatja meg
OFFSETésFETCHINSERTnem közvetlenül a ,UPDATE,MERGEésDELETEaz utasításokban, de megadhatja őket az utasításokban definiált alkonyatban. Az utasításbanINSERT INTO SELECTpéldául megadhatjaOFFSETésFETCHmegadhatja az utasítástSELECT.Egy olyan lekérdezésben, amely a lekérdezési eredmények sorrendjét adja meg,
EXCEPTvagyINTERSECToperátorokat használUNION, csak a végső lekérdezést adhatja megOFFSETésFETCH.A
TOPnem kombinálhatjaOFFSETésFETCHugyanabban a lekérdezési kifejezésben (ugyanabban a lekérdezési hatókörben).
Az ELTOLÁS és a FETCH használatával korlátozza a visszaadott sorokat
A záradék helyett TOP a OFFSETFETCH záradékokkal valósíthat meg egy lekérdezésoldali megoldást, és korlátozhatja az ügyfélalkalmazásnak küldött sorok számát.
Lapozási OFFSET megoldásként és FETCH lapozási megoldásként a lekérdezést egyszer kell futtatnia az ügyfélalkalmazásnak visszaadott minden egyes adatoldalon . Ha például egy lekérdezés eredményeit 10 sornyi növekményben szeretné visszaadni, a lekérdezést egyszer kell végrehajtania az 1–10. sorok visszaadásához, majd a lekérdezés újrafuttatásával visszaadhatja a 11–20. sorokat, és így tovább. Minden lekérdezés független, és semmilyen módon nem kapcsolódik egymáshoz. Ez a feltétel azt jelenti, hogy ellentétben a kurzor használatával, amelyben a lekérdezés egyszer lesz végrehajtva, és az állapot a kiszolgálón van fenntartva, az ügyfélalkalmazás felelős az állapot nyomon követéséért. Ahhoz, hogy stabil eredményeket lehessen elérni a lekérdezési kérelmek között az és OFFSEThasználatávalFETCH, a következő feltételeknek kell teljesülniük:
A lekérdezés alapjául szolgáló adatok nem változnak. Ez azt jelzi, hogy a lekérdezés nem frissíti a sorokat, vagy a lekérdezés lapjaira vonatkozó összes kérés egyetlen tranzakcióban, pillanatkép vagy szerializálható tranzakcióelkülönítés használatával hajtja végre. A tranzakcióelkülönítési szintekről további információt a TRANZAKCIÓELKÜLÖNÍTÉSI SZINT BEÁLLÍTÁSA című témakörben talál.
A
ORDER BYzáradék olyan oszlopot vagy oszlopkombinációt tartalmaz, amely garantáltan egyedi.
A Példák szakaszban tekintse meg a Több lekérdezés futtatása egyetlen tranzakcióban című példát.
Ha a lapozási megoldásban fontos a konzisztens végrehajtási tervek használata, fontolja meg a OPTIMIZE FOR lekérdezési tipp és OFFSET a FETCH paraméterek használatát. Lásd: Az ELTOLÁS és a FETCH értékek kifejezéseinek megadása a Példák szakaszban. További információ: OPTIMIZE FORLekérdezési tippek.
Examples
A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.
| Category | Kiemelt szintaxiselemek |
|---|---|
| Alapvető szintaxis | ORDER BY |
| Növekvő és csökkenő sorrend megadása |
DESC vagy ASC |
| Rendezés megadása | COLLATE |
| Feltételes sorrend megadása |
CASE kifejezés |
| AZ ORDER BY használata rangsorolási függvényben | Rangsorolási függvények |
| A visszaadott sorok számának korlátozása |
OFFSET és FETCH |
| A ORDER BY használata a UNION, a EXCEPT és az INTERSECT használatával | UNION |
Alapszintű szintaxis
Az ebben a szakaszban szereplő példák a ORDER BY záradék alapvető funkcióit mutatják be a minimálisan szükséges szintaxis használatával.
A. A kiválasztási listában definiált egyetlen oszlop megadása
Az alábbi példa a numerikus ProductID oszlop által beállított eredményt rendeli el. Mivel nem ad meg rendezési sorrendet, a lekérdezés az alapértelmezett növekvő sorrendet használja.
USE AdventureWorks2025;
GO
SELECT ProductID,
Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID;
B. Olyan oszlop megadása, amely nincs definiálva a kijelölési listában
Az alábbi példa egy olyan oszlop alapján rendezi az eredményt, amelyet a kijelölési lista nem tartalmaz, de a FROM záradék az oszlopot tartalmazó táblát határozza meg.
USE AdventureWorks2025;
GO
SELECT ProductID,
Name,
Color
FROM Production.Product
ORDER BY ListPrice;
C. Alias megadása rendezési oszlopként
Az alábbi példa az oszlop aliasát SchemaName adja meg rendezési sorrend oszlopként.
USE AdventureWorks2025;
GO
SELECT name,
SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
WHERE type = 'U'
ORDER BY SchemaName;
D. Kifejezés megadása rendezési oszlopként
Az alábbi példa egy kifejezést használ rendezési oszlopként. A kifejezés úgy van definiálva, hogy a DATEPART függvény segítségével rendezi az eredményeket az alkalmazottak alkalmazásának éve szerint.
USE AdventureWorks2025;
GO
SELECT BusinessEntityID,
JobTitle,
HireDate
FROM HumanResources.Employee
ORDER BY DATEPART(year, HireDate);
Növekvő és csökkenő rendezési sorrend megadása
A. Csökkenő sorrend megadása
Az alábbi példa csökkenő sorrendbe rendezi a numerikus oszlop ProductID által beállított eredményt.
USE AdventureWorks2025;
GO
SELECT ProductID,
Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID DESC;
B. Növekvő sorrend megadása
Az alábbi példa növekvő sorrendbe rendezi az Name oszlop által beállított eredményt. A karakterek betűrendbe vannak rendezve, nem numerikusan. Vagyis 10 rendezés 2 előtt.
USE AdventureWorks2025;
GO
SELECT ProductID,
Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY Name ASC;
C. Növekvő és csökkenő sorrend megadása
Az alábbi példa két oszlop szerint rendezi az eredményt. A lekérdezés eredményhalmazát először növekvő sorrendben rendezi az FirstName oszlop, majd az oszlop csökkenő sorrendbe rendezi LastName .
USE AdventureWorks2025;
GO
SELECT LastName,
FirstName
FROM Person.Person
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC;
Rendezés megadása
Az alábbi példa bemutatja, hogy a ORDER BY záradékban lévő rendezés megadása hogyan módosíthatja a lekérdezési eredmények visszaadásának sorrendjét. Létrejön egy tábla, amely egy kis- és nagybetűk megkülönböztetésével definiált oszlopot tartalmaz. Az értékek különböző kis- és nagybetűkkel vannak beszúrva. Mivel nincs megadva rendezés a ORDER BY záradékban, az első lekérdezés az oszlop rendezését használja az értékek rendezésekor. A második lekérdezésben a záradék egy kis- és nagybetűkre érzékeny rendezést határoz meg ORDER BY , amely módosítja a sorok visszaadásának sorrendjét.
USE tempdb;
GO
CREATE TABLE #t1
(
name NVARCHAR (15) COLLATE Latin1_General_CI_AI
);
INSERT INTO #t1
VALUES (N'Sánchez'),
(N'Sanchez'),
(N'sánchez'),
(N'sanchez');
-- This query uses the collation specified for the column 'name' for sorting.
SELECT name
FROM #t1
ORDER BY name;
-- This query uses the collation specified in the ORDER BY clause for sorting.
SELECT name
FROM #t1
ORDER BY name COLLATE Latin1_General_CS_AS;
Feltételes sorrend megadása
Az alábbi példák egy CASE záradék kifejezésével ORDER BY feltételesen határozzák meg a sorok rendezési sorrendjét egy adott oszlopérték alapján. Az első példában a tábla oszlopában SalariedFlag lévő HumanResources.Employee érték kiértékelése történik.
SalariedFlag Az 1 értékű alkalmazottakat csökkenő sorrendben adja vissza a BusinessEntityID rendszer.
SalariedFlag A 0 értékre beállított alkalmazottakat növekvő sorrendben adja vissza a BusinessEntityID rendszer. A második példában az eredményhalmazt az oszlop TerritoryName rendezi, ha az oszlop CountryRegionName egyenlő az "Egyesült Államok" és CountryRegionName az összes többi sor esetében.
SELECT BusinessEntityID,
SalariedFlag
FROM HumanResources.Employee
ORDER BY
CASE SalariedFlag
WHEN 1 THEN BusinessEntityID
END DESC,
CASE
WHEN SalariedFlag = 0 THEN BusinessEntityID
END;
SELECT BusinessEntityID,
LastName,
TerritoryName,
CountryRegionName
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL
ORDER BY
CASE CountryRegionName
WHEN 'United States' THEN TerritoryName ELSE CountryRegionName
END;
AZ ORDER BY használata rangsorolási függvényben
Az alábbi példa a ORDER BY rangsorolási függvények ROW_NUMBERzáradékát használja , RANKDENSE_RANKés NTILE.
USE AdventureWorks2025;
GO
SELECT p.FirstName,
p.LastName,
ROW_NUMBER() OVER (ORDER BY a.PostalCode) AS "Row Number",
RANK() OVER (ORDER BY a.PostalCode) AS "Rank",
DENSE_RANK() OVER (ORDER BY a.PostalCode) AS "Dense Rank",
NTILE(4) OVER (ORDER BY a.PostalCode) AS "Quartile",
s.SalesYTD,
a.PostalCode
FROM Sales.SalesPerson AS s
INNER JOIN Person.Person AS p
ON s.BusinessEntityID = p.BusinessEntityID
INNER JOIN Person.Address AS a
ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0;
A visszaadott sorok számának korlátozása
A következőkre vonatkozik: SQL Server 2012 (11.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány.
Az alábbi példák a lekérdezés által visszaadott sorok számát használják OFFSET és FETCH korlátozzák.
A. Az ELTOLÁS és a FETCH értékek egész számállandóinak megadása
Az alábbi példa egy egész számállandót határoz meg a záradékok és OFFSET a FETCH záradékok értékeként. Az első lekérdezés az oszlop DepartmentIDszerint rendezett összes sort adja vissza. Hasonlítsa össze a lekérdezés által visszaadott eredményeket az azt követő két lekérdezés eredményével. A következő lekérdezés a záradék OFFSET 5 ROWS használatával kihagyja az első öt sort, és visszaadja az összes többi sort. Az utolsó lekérdezés a záradékot OFFSET 0 ROWS használja az első sorra való kezdéshez, majd a visszaadott sorok 10 sorra való korlátozására a FETCH NEXT 10 ROWS ONLY rendezett eredményhalmazból.
USE AdventureWorks2025;
GO
-- Return all rows sorted by the column DepartmentID.
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID;
-- Skip the first 5 rows from the sorted result set and return all remaining rows.
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 5 ROWS;
-- Skip 0 rows and return only the first 10 rows from the sorted result set.
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 0 ROWS
FETCH NEXT 10 ROWS ONLY;
B. Az ELTOLÁS és a FETCH értékek változóinak megadása
Az alábbi példa deklarálja a változókat@RowsToSkip, és @FetchRows megadja ezeket a változókat a és OFFSET a FETCH záradékokban.
USE AdventureWorks2025;
GO
-- Specifying variables for OFFSET and FETCH values
DECLARE @RowsToSkip AS TINYINT = 2,
@FetchRows AS TINYINT = 8;
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @RowsToSkip ROWS
FETCH NEXT @FetchRows ROWS ONLY;
C. Az ELTOLÁS és a FETCH értékek kifejezéseinek megadása
Az alábbi példa a kifejezéssel @StartingRowNumber - 1 adja meg az OFFSET értéket, a kifejezést @EndingRowNumber - @StartingRowNumber + 1 pedig az FETCH érték megadásához. Emellett a lekérdezési tipp OPTIMIZE FORis meg van adva. Ezzel a tippel egy adott értéket adhat meg egy helyi változóhoz a lekérdezés lefordításakor és optimalizálásakor. Az érték csak a lekérdezés optimalizálása során használatos, a lekérdezés végrehajtásakor nem. További információ: Lekérdezési tippek.
USE AdventureWorks2025;
GO
-- Specifying expressions for OFFSET and FETCH values
DECLARE @StartingRowNumber AS TINYINT = 1,
@EndingRowNumber AS TINYINT = 8;
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @StartingRowNumber - 1 ROWS
FETCH NEXT @EndingRowNumber - @StartingRowNumber + 1 ROWS ONLY
OPTION (OPTIMIZE FOR (@StartingRowNumber = 1, @EndingRowNumber = 20));
D. Állandó skaláris allekérdezés megadása AZ ELTOLÁS és a FETCH értékekhez
Az alábbi példa egy állandó skaláris alquery használatával határozza meg a FETCH záradék értékét. Az al lekérdezés egyetlen értéket ad vissza a tábla PageSizeoszlopábóldbo.AppSettings.
-- Specifying a constant scalar subquery
USE AdventureWorks2025;
GO
CREATE TABLE dbo.AppSettings
(
AppSettingID INT NOT NULL,
PageSize INT NOT NULL
);
INSERT INTO dbo.AppSettings
VALUES (1, 10);
DECLARE @StartingRowNumber AS TINYINT = 1;
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC
OFFSET @StartingRowNumber ROWS
FETCH NEXT (SELECT PageSize
FROM dbo.AppSettings
WHERE AppSettingID = 1) ROWS ONLY;
E. Több lekérdezés futtatása egyetlen tranzakcióban
Az alábbi példa egy lapozómegoldás implementálásának egyik módszerét mutatja be, amely biztosítja, hogy a rendszer stabil eredményeket adjon vissza a lekérdezés összes kérésében. A lekérdezés egyetlen tranzakcióban, a pillanatkép-elkülönítési szinttel lesz végrehajtva, és a záradékban megadott oszlop biztosítja az ORDER BY oszlopok egyediségét.
USE AdventureWorks2025;
GO
-- Ensure the database can support the snapshot isolation level set for the query.
IF (SELECT snapshot_isolation_state
FROM sys.databases
WHERE name = N'AdventureWorks2025') = 0
ALTER DATABASE AdventureWorks2025
SET ALLOW_SNAPSHOT_ISOLATION ON;
-- Set the transaction isolation level to SNAPSHOT for this query.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
-- Beginning the transaction.
BEGIN TRANSACTION;
-- Declare and set the variables for the OFFSET and FETCH values.
DECLARE @StartingRowNumber AS INT = 1,
@RowCountPerPage AS INT = 3;
-- Create the condition to stop the transaction after all rows have been returned.
WHILE (SELECT COUNT(*)
FROM HumanResources.Department) >= @StartingRowNumber
BEGIN
-- Run the query until the stop condition is met.
SELECT DepartmentID,
Name,
GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @StartingRowNumber - 1 ROWS
FETCH NEXT @RowCountPerPage ROWS ONLY;
-- Increment @StartingRowNumber value.
SET @StartingRowNumber = @StartingRowNumber + @RowCountPerPage;
CONTINUE;
END
COMMIT TRANSACTION;
A ORDER BY használata a UNION, a EXCEPT és az INTERSECT használatával
Amikor egy lekérdezés a UNION, EXCEPTvagy INTERSECT operátorokat használja, adja meg a ORDER BY záradékot az utasítás végén. A lekérdezés a kombinált lekérdezések eredményeit rendezi. Az alábbi példa az összes piros vagy sárga terméket visszaadja, és az oszlop ListPriceszerint rendezi a kombinált listát.
USE AdventureWorks2025;
GO
SELECT Name,
Color,
ListPrice
FROM Production.Product
WHERE Color = 'Red' -- ORDER BY cannot be specified here.
UNION ALL
SELECT Name,
Color,
ListPrice
FROM Production.Product
WHERE Color = 'Yellow'
ORDER BY ListPrice ASC;
Példák: Azure Synapse Analytics and Analytics Platform System (PDW)
Az alábbi példa azt mutatja be, hogy a numerikus EmployeeKey oszlop által beállított eredmény növekvő sorrendben van-e rendezve.
-- Uses AdventureWorks
SELECT EmployeeKey,
FirstName,
LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey;
Az alábbi példa csökkenő sorrendbe rendezi a numerikus EmployeeKey oszlop által beállított eredményt.
-- Uses AdventureWorks
SELECT EmployeeKey,
FirstName,
LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey DESC;
Az alábbi példa az oszlop által beállított eredményt rendeli LastName meg.
-- Uses AdventureWorks
SELECT EmployeeKey,
FirstName,
LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName;
Az alábbi példa két oszlop szerint rendezi a rendeléseket. Ez a lekérdezés először növekvő sorrendben rendezi az FirstName oszlopot, majd csökkenő sorrendben rendezi a gyakori FirstName értékeket az LastName oszlop szerint.
-- Uses AdventureWorks
SELECT EmployeeKey,
FirstName,
LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName, FirstName;
Kapcsolódó tartalom
- Kifejezések (Transact-SQL)
- VÁLASZT (Transact-SQL)
- FROM klauszula és JOIN, APPLY, PIVOT (Transact-SQL)
- Rangsorolási függvények (Transact-SQL)
- TOP (Transact-SQL)
- Lekérdezési tippek (Transact-SQL)
- Operátorok beállítása – KIVÉVE és INTERSECT (Transact-SQL)
- Operátorok beállítása – UNION (Transact-SQL)
- ESET (Transact-SQL)