Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Sortuje dane zwracane przez zapytanie w programie SQL Server. Użyj tej klauzuli, aby:
Kolejność zestawu wyników zapytania według określonej listy kolumn i opcjonalnie ogranicz wiersze zwracane do określonego zakresu. Kolejność zwracania wierszy w zestawie wyników nie jest gwarantowana, chyba że określono klauzulę
ORDER BY.Określ kolejność, w jakiej wartości funkcji klasyfikacji są stosowane do zestawu wyników.
Transact-SQL konwencje składni
Note
ORDER BY nie jest obsługiwana w SELECT/INTO instrukcjach lub CREATE TABLE AS SELECT (CTAS) w usłudze Azure Synapse Analytics lub Analytics Platform System (PDW).
Syntax
Składnia dla programu SQL Server i usługi Azure SQL Database.
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
]
}
Składnia dla usług Azure Synapse Analytics i Parallel Data Warehouse.
[ ORDER BY
{
order_by_expression
[ ASC | DESC ]
} [ , ...n ]
]
Arguments
order_by_expression
Określa kolumnę lub wyrażenie, na którym ma być sortowane zestaw wyników zapytania. Kolumnę sortowania można określić jako nazwę lub alias kolumny albo nieujemną liczbę całkowitą reprezentującą położenie kolumny na liście wyboru.
Można określić wiele kolumn sortowania. Nazwy kolumn muszą być unikatowe. Sekwencja kolumn sortowania w klauzuli ORDER BY definiuje organizację posortowanego zestawu wyników. Oznacza to, że zestaw wyników jest sortowany według pierwszej kolumny, a następnie uporządkowana lista jest sortowana według drugiej kolumny itd.
Nazwy kolumn, do których odwołuje się ORDER BY klauzula , muszą odpowiadać aliasowi kolumny lub kolumny na liście wyboru lub kolumnie zdefiniowanej w tabeli określonej w FROM klauzuli bez żadnych niejednoznaczności. Jeśli klauzula ORDER BY odwołuje się do aliasu kolumny z listy wyboru, alias kolumny musi być używany samodzielnie, a nie jako część wyrażenia w ORDER BY klauzuli, na przykład:
SELECT SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
ORDER BY SchemaName; -- correct
SELECT SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
ORDER BY SchemaName + ''; -- wrong
SORTOWANIE collation_name
Określa, że operację ORDER BY należy wykonać zgodnie z sortowaniem określonym w collation_name, a nie zgodnie z sortowaniem kolumny zgodnie z definicją w tabeli lub widoku.
Collation_name może być nazwą sortowania systemu Windows lub nazwą sortowania SQL. Aby uzyskać więcej informacji, zobacz Collation and Unicode support.
COLLATE dotyczy tylko kolumn typu char, varchar, nchari nvarchar.
ASC | DESC
Określa, że wartości w określonej kolumnie powinny być sortowane w kolejności rosnącej lub malejącej.
ASC sortuje od najniższej wartości do najwyższej wartości.
DESC sortuje od najwyższej wartości do najniższej wartości.
ASC jest domyślną kolejnością sortowania.
NULL wartości są traktowane jako najniższe możliwe wartości.
PRZESUNIĘCIE { integer_constant offset_row_count_expression | } { WIERSZ | WIERSZE }
Dotyczy: SQL Server 2012 (11.x) i nowsze wersje, Azure SQL Database i Azure SQL Managed Instance.
Określa liczbę wierszy do pominięcia przed rozpoczęciem zwracania wierszy z wyrażenia zapytania. Wartość może być stałą całkowitą lub wyrażeniem większym lub równym zero.
offset_row_count_expression może być zmienną, parametrem lub stałym podzapytaniem skalarnym. Gdy jest używana podzapytywanie, nie może odwoływać się do żadnych kolumn zdefiniowanych w zakresie zapytania zewnętrznego. Oznacza to, że nie można go skorelować z zapytaniem zewnętrznym.
ROW i ROWS są synonimami i są udostępniane w celu zapewnienia zgodności ze standardem ANSI.
W planach wykonywania zapytań wartość liczby wierszy przesunięcia jest wyświetlana w atrybucie TOP operatora zapytania.
POBIERANIE { FIRST | NEXT } { integer_constant fetch_row_count_expression | } { WIERSZ | TYLKO WIERSZE }
Dotyczy: SQL Server 2012 (11.x) i nowsze wersje, Azure SQL Database i Azure SQL Managed Instance.
Określa liczbę wierszy do zwrócenia po przetworzeniu klauzuli OFFSET . Wartość może być stałą całkowitą lub wyrażeniem większym lub równym jednej.
fetch_row_count_expression może być zmienną, parametrem lub stałym podzapytaniem skalarnym. Gdy jest używana podzapytywanie, nie może odwoływać się do żadnych kolumn zdefiniowanych w zakresie zapytania zewnętrznego. Oznacza to, że nie można go skorelować z zapytaniem zewnętrznym.
FIRST i NEXT są synonimami i są udostępniane w celu zapewnienia zgodności ze standardem ANSI.
ROW i ROWS są synonimami i są udostępniane w celu zapewnienia zgodności ze standardem ANSI.
W planach wykonywania zapytań wartość liczby wierszy przesunięcia jest wyświetlana w wierszu lub górnym atrybucie TOP operatora zapytania.
Najlepsze rozwiązania
Unikaj określania liczb całkowitych w klauzuli ORDER BY jako pozycyjnych reprezentacji kolumn na liście wyboru. Na przykład, mimo że instrukcja taka jak SELECT ProductID, Name FROM Production.Production ORDER BY 2 jest prawidłowa, instrukcja nie jest tak łatwo zrozumiała dla innych osób w porównaniu z określeniem rzeczywistej nazwy kolumny. Ponadto zmiany na liście wyboru, takie jak zmiana kolejności kolumn lub dodawanie nowych kolumn, wymaga zmodyfikowania ORDER BY klauzuli w celu uniknięcia nieoczekiwanych wyników.
W instrukcji SELECT TOP (<n>) zawsze używaj klauzuli ORDER BY . Jest to jedyny sposób przewidywania, na które wiersze mają wpływ TOP. Aby uzyskać więcej informacji, zobacz TOP.
Interoperability
W przypadku użycia instrukcji SELECT...INTO or INSERT...SELECT do wstawiania wierszy z innego źródła ORDER BY klauzula nie gwarantuje, że wiersze zostaną wstawione w określonej kolejności.
Użycie elementu OFFSET i FETCH w widoku nie zmienia właściwości aktualizowalności widoku.
Limitations
Nie ma limitu liczby kolumn w klauzuli ORDER BY . Jednak całkowity rozmiar kolumn określonych w ORDER BY klauzuli nie może przekraczać 8060 bajtów.
Kolumny typu ntext, text, image, geography, geometry i xml nie mogą być używane w klauzuli ORDER BY .
Nie można określić liczby całkowitej lub stałej, gdy order_by_expression pojawia się w funkcji klasyfikacji. Aby uzyskać więcej informacji, zobacz SELECT — OVER, klauzula.
Jeśli nazwa tabeli jest aliasem w FROM klauzuli, tylko nazwa aliasu może służyć do kwalifikowania kolumn w klauzuli ORDER BY .
Nazwy kolumn i aliasy określone w ORDER BY klauzuli muszą być zdefiniowane na liście select, jeśli SELECT instrukcja zawiera jedną z następujących klauzul lub operatorów:
-
UNIONoperator -
EXCEPToperator -
INTERSECToperator SELECT DISTINCT
Ponadto, gdy instrukcja zawiera UNIONoperator , EXCEPTlub INTERSECT , nazwy kolumn lub aliasy kolumn muszą być określone na liście wyboru pierwszego (po lewej stronie) zapytania.
W zapytaniu, które używa UNIONoperatorów , EXCEPTlub INTERSECT , ORDER BY jest dozwolone tylko na końcu instrukcji . To ograniczenie dotyczy tylko wtedy, gdy określisz UNION, EXCEPTi INTERSECT w zapytaniu najwyższego poziomu, a nie w podzapytaniu. Zobacz następującą sekcję Przykłady .
Klauzula nie jest prawidłowa ORDER BY w widokach, funkcjach wbudowanych, tabelach pochodnych i podzapytach, chyba że TOP określono również klauzule lub OFFSET i FETCH . Gdy ORDER BY jest używany w tych obiektach, klauzula jest używana tylko do określania wierszy zwracanych przez klauzulę TOP lub OFFSET klauzule i FETCH . Klauzula ORDER BY nie gwarantuje uporządkowanych wyników, gdy te konstrukcje są odpytywane, chyba że ORDER BY jest również określony w samym zapytaniu.
OFFSET i FETCH nie są obsługiwane w widokach indeksowanych ani w widoku zdefiniowanym za pomocą klauzuli CHECK OPTION .
OFFSET i FETCH może być używany w dowolnym zapytaniu, które zezwala TOP i ORDER BY z następującymi ograniczeniami:
Klauzula
OVERnie obsługujeOFFSETklauzuli iFETCH.OFFSETiFETCHnie można określić bezpośrednio wINSERTinstrukcjach ,UPDATE,MERGEiDELETE, ale można je określić w podzapytaniu zdefiniowanym w tych instrukcjach. Na przykład w instrukcjiINSERT INTO SELECTOFFSETiFETCHmożna go określić w instrukcjiSELECT.W zapytaniu używającym
UNIONEXCEPToperatorówINTERSECTOFFSETlubFETCHmożna określić tylko w ostatnim zapytaniu, które określa kolejność wyników zapytania.TOPNie można połączyć zOFFSETiFETCHw tym samym wyrażeniu zapytania (w tym samym zakresie zapytania).
Użyj funkcji OFFSET i FETCH, aby ograniczyć zwracane wiersze
Należy użyć OFFSET klauzul i FETCH zamiast TOP klauzuli , aby zaimplementować rozwiązanie do stronicowania zapytań i ograniczyć liczbę wierszy wysyłanych do aplikacji klienckiej.
Użycie funkcji OFFSET i FETCH jako rozwiązanie stronicowania wymaga jednorazowego uruchomienia zapytania dla każdej strony danych zwróconych do aplikacji klienckiej. Aby na przykład zwrócić wyniki zapytania w 10-wierszowych przyrostach, należy wykonać zapytanie jednorazowo, aby zwrócić wiersze od 1 do 10, a następnie ponownie uruchomić zapytanie, aby zwrócić wiersze od 11 do 20 itd. Każde zapytanie jest niezależne i nie jest ze sobą powiązane w żaden sposób. Oznacza to, że w przeciwieństwie do korzystania z kursora, w którym zapytanie jest wykonywane raz i stan jest utrzymywany na serwerze, aplikacja kliencka jest odpowiedzialna za stan śledzenia. Aby osiągnąć stabilne wyniki między żądaniami zapytań przy użyciu i OFFSETFETCH, muszą zostać spełnione następujące warunki:
Dane bazowe, które są używane przez zapytanie, nie mogą ulec zmianie. Oznacza to, że wiersze dotykane przez zapytanie nie są aktualizowane lub wszystkie żądania stron z zapytania są wykonywane w jednej transakcji przy użyciu migawki lub izolacji transakcji możliwej do serializacji. Aby uzyskać więcej informacji na temat tych poziomów izolacji transakcji, zobacz USTAWIANIE POZIOMU IZOLACJI TRANSAKCJI.
Klauzula
ORDER BYzawiera kolumnę lub kombinację kolumn, które mają gwarancję unikatowości.
Zobacz przykład "Uruchamianie wielu zapytań w jednej transakcji" w sekcji Przykłady w dalszej części tego artykułu.
Jeśli spójne plany wykonywania są ważne w rozwiązaniu stronicowania, rozważ użycie OPTIMIZE FOR wskazówki zapytania dla parametrów OFFSET i FETCH . Zobacz Określanie wyrażeń dla wartości OFFSET i FETCH w sekcji Przykłady w dalszej części tego artykułu. Aby uzyskać więcej informacji na temat OPTIMIZE FORprogramu , zobacz Wskazówki dotyczące zapytań.
Examples
Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.
| Category | Polecane elementy składni |
|---|---|
| Podstawowa składnia | ORDER BY |
| Określanie kolejności rosnącej i malejącej |
DESC lub ASC |
| Określanie sortowania | COLLATE |
| Określanie kolejności warunkowej | wyrażenie CASE |
| Używanie funkcji ORDER BY w funkcji klasyfikacji | Funkcje klasyfikowania |
| Ogranicz liczbę zwracanych wierszy |
OFFSET i FETCH |
| Używanie funkcji ORDER BY z WYJĄTKIEM i INTERSECT | UNION |
Składnia podstawowa
Przykłady w tej sekcji przedstawiają podstawowe funkcje klauzuli ORDER BY przy użyciu minimalnej wymaganej składni.
A. Określanie pojedynczej kolumny zdefiniowanej na liście wyboru
Poniższy przykład porządkuje zestaw wyników według kolumny liczbowej ProductID . Ponieważ określona kolejność sortowania nie jest określona, jest używana domyślna (kolejność rosnąca).
USE AdventureWorks2022;
GO
SELECT ProductID, Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID;
B. Określ kolumnę, która nie jest zdefiniowana na liście wyboru
Poniższy przykład porządkuje zestaw wyników według kolumny, która nie znajduje się na liście wyboru, ale jest zdefiniowana w tabeli określonej w klauzuli FROM .
USE AdventureWorks2022;
GO
SELECT ProductID, Name, Color
FROM Production.Product
ORDER BY ListPrice;
C. Określanie aliasu jako kolumny sortowania
Poniższy przykład określa alias SchemaName kolumny jako kolumnę kolejności sortowania.
USE AdventureWorks2022;
GO
SELECT name, SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
WHERE type = 'U'
ORDER BY SchemaName;
D. Określanie wyrażenia jako kolumny sortowania
W poniższym przykładzie użyto wyrażenia jako kolumny sortowania. Wyrażenie jest definiowane przy użyciu DATEPART funkcji do sortowania zestawu wyników według roku, w którym pracownicy zostali zatrudnieni.
USE AdventureWorks2022;
GO
SELECT BusinessEntityID, JobTitle, HireDate
FROM HumanResources.Employee
ORDER BY DATEPART(year, HireDate);
Określanie kolejności sortowania rosnącego i malejącego
A. Określanie kolejności malejącej
Poniższy przykład porządkuje zestaw wyników według kolumny ProductID liczbowej w kolejności malejącej.
USE AdventureWorks2022;
GO
SELECT ProductID, Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID DESC;
B. Określanie kolejności rosnącej
Poniższy przykład porządkuje zestaw wyników według kolumny Name w kolejności rosnącej. Znaki są sortowane alfabetycznie, a nie numerycznie. Oznacza to, że 10 sortuje przed 2.
USE AdventureWorks2022;
GO
SELECT ProductID, Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY Name ASC;
C. Określanie kolejności rosnącej i malejącej
Poniższy przykład porządkuje zestaw wyników według dwóch kolumn. Zestaw wyników zapytania jest najpierw sortowany w kolejności rosnącej FirstName według kolumny, a następnie sortowany w kolejności malejącej według kolumny LastName .
USE AdventureWorks2022;
GO
SELECT LastName, FirstName
FROM Person.Person
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC;
Określanie sortowania
W poniższym przykładzie pokazano, jak określenie sortowania w ORDER BY klauzuli może zmienić kolejność zwracania wyników zapytania. Zostanie utworzona tabela zawierająca kolumnę zdefiniowaną przy użyciu sortowania bez uwzględniania wielkości liter, bez uwzględniania akcentów. Wartości są wstawiane z różnymi różnicami wielkości liter i akcentów. Ponieważ sortowanie nie jest określone w klauzuli ORDER BY , pierwsze zapytanie używa sortowania kolumny podczas sortowania wartości. W drugim zapytaniu w klauzuli określono ORDER BY sortowanie wrażliwe na wielkość liter, które zmienia kolejność zwracania wierszy.
USE tempdb;
GO
CREATE TABLE #t1 (name NVARCHAR(15) COLLATE Latin1_General_CI_AI);
GO
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;
Określanie kolejności warunkowej
W poniższych przykładach użyto CASE wyrażenia w ORDER BY klauzuli , aby warunkowo określić kolejność sortowania wierszy na podstawie danej wartości kolumny. W pierwszym przykładzie wartość w SalariedFlag kolumnie HumanResources.Employee tabeli jest obliczana. Pracownicy, którzy mają ustawioną SalariedFlag wartość 1, są zwracani w kolejności malejącej.BusinessEntityID Pracownicy, którzy mają ustawioną SalariedFlag wartość 0, są zwracani w kolejności rosnącej BusinessEntityID . W drugim przykładzie zestaw wyników jest uporządkowany według kolumny TerritoryName , gdy kolumna CountryRegionName jest równa "Stany Zjednoczone" i dla CountryRegionName wszystkich innych wierszy.
SELECT BusinessEntityID,
SalariedFlag
FROM HumanResources.Employee
ORDER BY
CASE SalariedFlag
WHEN 1 THEN BusinessEntityID
END DESC,
CASE
WHEN SalariedFlag = 0 THEN BusinessEntityID
END;
GO
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;
Używanie funkcji ORDER BY w funkcji klasyfikacji
W poniższym przykładzie użyto klauzuli ORDER BY w funkcjach ROW_NUMBERklasyfikacji , RANK, DENSE_RANKi NTILE.
USE AdventureWorks2022;
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;
Ogranicz liczbę zwracanych wierszy
Dotyczy: SQL Server 2012 (11.x) i nowsze wersje, Azure SQL Database i Azure SQL Managed Instance.
W poniższych przykładach użyto instrukcji OFFSET i FETCH ograniczysz liczbę wierszy zwracanych przez zapytanie.
A. Określanie stałych całkowitych dla wartości OFFSET i FETCH
W poniższym przykładzie określono stałą całkowitą jako wartość OFFSET klauzul i FETCH . Pierwsze zapytanie zwraca wszystkie wiersze posortowane według kolumny DepartmentID. Porównaj wyniki zwrócone przez to zapytanie z wynikami dwóch zapytań, które po niej są zgodne. Następne zapytanie używa klauzuli OFFSET 5 ROWS , aby pominąć pierwsze pięć wierszy i zwrócić wszystkie pozostałe wiersze. Ostatnie zapytanie używa klauzuli OFFSET 0 ROWS , aby rozpocząć od pierwszego wiersza, a następnie używa FETCH NEXT 10 ROWS ONLY go do ograniczenia wierszy zwracanych do 10 wierszy z posortowanego zestawu wyników.
USE AdventureWorks2022;
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. Określanie zmiennych dla wartości OFFSET i FETCH
Poniższy przykład deklaruje zmienne @RowsToSkip i @FetchRows określa te zmienne w OFFSET klauzulach i FETCH .
USE AdventureWorks2022;
GO
-- Specifying variables for OFFSET and FETCH values
DECLARE
@RowsToSkip TINYINT = 2,
@FetchRows TINYINT = 8;
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @RowsToSkip ROWS
FETCH NEXT @FetchRows ROWS ONLY;
C. Określanie wyrażeń dla wartości OFFSET i FETCH
W poniższym przykładzie użyto wyrażenia @StartingRowNumber - 1 , aby określić OFFSET wartość i wyrażenie @EndingRowNumber - @StartingRowNumber + 1 w celu określenia wartości FETCH. Ponadto określono wskazówkę OPTIMIZE FORdotyczącą zapytania , . Ta wskazówka może służyć do podawania określonej wartości zmiennej lokalnej podczas kompilowania i optymalizowania zapytania. Wartość jest używana tylko podczas optymalizacji zapytań, a nie podczas wykonywania zapytania. Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące zapytań.
USE AdventureWorks2022;
GO
-- Specifying expressions for OFFSET and FETCH values
DECLARE
@StartingRowNumber TINYINT = 1,
@EndingRowNumber 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. Określanie stałej podzapytania skalarnego dla wartości OFFSET i FETCH
W poniższym przykładzie użyto stałej podzapytania skalarnego, aby zdefiniować wartość klauzuli FETCH . Podzapytywanie zwraca pojedynczą wartość z kolumny PageSize w tabeli dbo.AppSettings.
-- Specifying a constant scalar subquery
USE AdventureWorks2022;
GO
CREATE TABLE dbo.AppSettings (
AppSettingID INT NOT NULL,
PageSize INT NOT NULL
);
GO
INSERT INTO dbo.AppSettings
VALUES (1, 10);
GO
DECLARE @StartingRowNumber 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. Uruchamianie wielu zapytań w jednej transakcji
W poniższym przykładzie pokazano jedną z metod implementowania rozwiązania stronicowania, która zapewnia zwracanie stabilnych wyników we wszystkich żądaniach z zapytania. Zapytanie jest wykonywane w jednej transakcji przy użyciu poziomu izolacji migawki, a kolumna określona w ORDER BY klauzuli zapewnia unikatowość kolumn.
USE AdventureWorks2022;
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'AdventureWorks2022'
) = 0
ALTER DATABASE AdventureWorks2022
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
-- Set the transaction isolation level to SNAPSHOT for this query.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
GO
-- Beginning the transaction.
BEGIN TRANSACTION;
GO
-- Declare and set the variables for the OFFSET and FETCH values.
DECLARE
@StartingRowNumber INT = 1,
@RowCountPerPage 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;
GO
COMMIT TRANSACTION;
GO
Używanie funkcji ORDER BY z WYJĄTKIEM i INTERSECT
Gdy zapytanie używa UNIONoperatorów , EXCEPTlub INTERSECT , klauzula ORDER BY musi być określona na końcu instrukcji, a wyniki połączonych zapytań są sortowane. Poniższy przykład zwraca wszystkie produkty, które są czerwone lub żółte i sortuje tę połączoną listę według kolumny ListPrice.
USE AdventureWorks2022;
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;
Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)
W poniższym przykładzie pokazano kolejność zestawu wyników według kolumny liczbowej EmployeeKey w kolejności rosnącej.
-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey;
Poniższy przykład porządkuje zestaw wyników według kolumny liczbowej EmployeeKey w kolejności malejącej.
-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey DESC;
Poniższy przykład porządkuje zestaw wyników według kolumny LastName .
-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName;
Poniższe przykładowe zamówienia według dwóch kolumn. To zapytanie najpierw sortuje w kolejności rosnącej FirstName według kolumny, a następnie sortuje wspólne FirstName wartości w kolejności malejącej według kolumny LastName .
-- Uses AdventureWorks
SELECT EmployeeKey, FirstName, LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName, FirstName;
Treści powiązane
- Wyrażenia (Transact-SQL)
- WYBIERZ (Transact-SQL)
- Klauzula FROM oraz JOIN, APPLY, PIVOT (Transact-SQL)
- Funkcje klasyfikacji (Transact-SQL)
- TOP (Transact-SQL)
- wskazówki dotyczące zapytań (Transact-SQL)
- Operatory zbiorów - EXCEPT i INTERSECT (Transact-SQL)
- Operatory zestawu — UNION (Transact-SQL)
- SPRAWA (Transact-SQL)