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
Baza danych SQL w usłudze Microsoft Fabric
Pobiera określony wiersz z kursora serwera Transact-SQL.
Transact-SQL konwencje składni
Syntax
FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
]
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }
[ INTO @variable_name [ ,...n ] ]
Arguments
NEXT
Zwraca wiersz wyników bezpośrednio po bieżącym wierszu i zwiększa bieżący wiersz do zwracanego wiersza. Jeśli FETCH NEXT jest pierwszym pobieraniem względem kursora, zwraca pierwszy wiersz w zestawie wyników.
NEXT to domyślna opcja pobierania kursora.
PRIOR
Zwraca wiersz wyników bezpośrednio poprzedzający bieżący wiersz, a następnie odkreśli bieżący wiersz do zwróconego wiersza. Jeśli FETCH PRIOR jest pierwszym pobieraniem względem kursora, żaden wiersz nie jest zwracany, a kursor jest pozostawiony w lewo przed pierwszym wierszem.
FIRST
Zwraca pierwszy wiersz w kursorze i sprawia, że jest to bieżący wiersz.
LAST
Zwraca ostatni wiersz w kursorze i sprawia, że jest to bieżący wiersz.
ABSOLUTE { n| @nvar}
Jeśli n lub @nvar jest dodatni, zwraca wiersz n wierszy z przodu kursora i sprawia, że zwracany wiersz jest nowym bieżącym wierszem. Jeśli n lub @nvar jest ujemny, zwraca wiersz n wierszy przed końcem kursora i sprawia, że zwracany wiersz jest nowym bieżącym wierszem. Jeśli n lub @nvar ma wartość 0, nie są zwracane żadne wiersze.
n musi być stałą liczbą całkowitą, a @nvar musi być mały, tinyint lub int.
WZGLĘDNY { n| @nvar}
Jeśli n lub @nvar jest dodatni, zwraca wiersz n wierszy poza bieżącym wierszem i sprawia, że zwracany wiersz jest nowym bieżącym wierszem. Jeśli n lub @nvar jest ujemny, zwraca wiersz n wierszy przed bieżącym wierszem i sprawia, że zwrócony wiersz jest nowym bieżącym wierszem. Jeśli n lub @nvar ma wartość 0, zwraca bieżący wiersz. Jeśli FETCH RELATIVE określono wartość n lub @nvar ustawioną na liczby ujemne lub 0 podczas pierwszego pobierania wykonywanego względem kursora, nie są zwracane żadne wiersze.
n musi być stałą liczbą całkowitą, a @nvar musi być mały, tinyint lub int.
GLOBAL
Określa, że cursor_name odnosi się do kursora globalnego.
cursor_name
To nazwa otwartego kursora, z którego ma zostać wykonane pobieranie. Jeśli zarówno globalny, jak i lokalny kursor istnieje z cursor_name jako ich nazwę, cursor_name do kursora globalnego, jeśli określono globalny i do kursora lokalnego, jeśli nie określono globalnego.
@
cursor_variable_name
To nazwa zmiennej kursora odwołującej się do otwartego kursora, z którego ma zostać wykonane pobieranie.
INTO @variable_name[ ,...n]
Umożliwia umieszczanie danych z kolumn pobierania do zmiennych lokalnych. Każda zmienna na liście od lewej do prawej jest skojarzona z odpowiednią kolumną w zestawie wyników kursora. Typ danych każdej zmiennej musi być zgodny lub być obsługiwaną niejawną konwersją typu danych odpowiadającej mu kolumny zestawu wyników. Liczba zmiennych musi być zgodna z liczbą kolumn na liście wyboru kursora.
Remarks
SCROLL Jeśli opcja nie jest określona w instrukcji stylu DECLARE CURSOR ISO, NEXT jest jedyną FETCH obsługiwaną opcją. Jeśli SCROLL jest określony w stylu DECLARE CURSORISO, wszystkie FETCH opcje są obsługiwane.
Gdy używane są rozszerzenia kursora Transact-SQL DEKLARUJ, obowiązują następujące reguły:
Jeśli określono jedną
FORWARD_ONLYz opcji lubFAST_FORWARD,NEXTjest jedynąFETCHobsługiwaną opcją.Jeśli
DYNAMICparametr ,FORWARD_ONLYlubFAST_FORWARDnie zostanie określony, a jeden zKEYSET,STATIClubSCROLLjest określony, wszystkieFETCHopcje są obsługiwane.DYNAMIC SCROLLkursory obsługują wszystkie opcje zFETCHwyjątkiemABSOLUTE.
Funkcja @@FETCH_STATUS zgłasza stan ostatniej FETCH instrukcji. Te same informacje są rejestrowane w kolumnie fetch_status w kursorze zwróconym przez sp_describe_cursor. Te informacje o stanie powinny służyć do określenia ważności danych zwróconych przez instrukcję przed podjęciem FETCH próby wykonania jakiejkolwiek operacji względem tych danych. Aby uzyskać więcej informacji, zobacz @@FETCH_STATUS (Transact-SQL).
Permissions
Uprawnienia domyślne dla FETCH dowolnego prawidłowego użytkownika.
Examples
A. Używanie funkcji FETCH w prostym kursorze
W poniższym przykładzie zadeklarowany jest prosty kursor dla wierszy w Person.Person tabeli z nazwą, która zaczyna się od B, i używa metody FETCH NEXT do przechodzenia przez wiersze. Instrukcje FETCH zwracają wartość kolumny określonej w DECLARE CURSOR elempcie jako zestaw wyników z jednym wierszem.
USE AdventureWorks2022;
GO
DECLARE contact_cursor CURSOR FOR
SELECT LastName FROM Person.Person
WHERE LastName LIKE 'B%'
ORDER BY LastName;
OPEN contact_cursor;
-- Perform the first fetch.
FETCH NEXT FROM contact_cursor;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM contact_cursor;
END
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
GO
B. Używanie funkcji FETCH do przechowywania wartości w zmiennych
Poniższy przykład jest podobny do przykładu A, z wyjątkiem danych wyjściowych FETCH instrukcji jest przechowywany w zmiennych lokalnych, a nie zwracany bezpośrednio do klienta. Instrukcja PRINT łączy zmienne w jeden ciąg i zwraca je do klienta.
USE AdventureWorks2022;
GO
-- Declare the variables to store the values returned by FETCH.
DECLARE @LastName VARCHAR(50), @FirstName VARCHAR(50);
DECLARE contact_cursor CURSOR FOR
SELECT LastName, FirstName FROM Person.Person
WHERE LastName LIKE 'B%'
ORDER BY LastName, FirstName;
OPEN contact_cursor;
-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.
FETCH NEXT FROM contact_cursor
INTO @LastName, @FirstName;
-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- Concatenate and display the current values in the variables.
PRINT 'Contact Name: ' + @FirstName + ' ' + @LastName
-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM contact_cursor
INTO @LastName, @FirstName;
END
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
GO
C. Deklarowanie kursora SCROLL i używanie innych opcji pobierania
Poniższy przykład tworzy kursor, SCROLL aby umożliwić pełne przewijanie za pośrednictwem LASTopcji , PRIOR, RELATIVEi ABSOLUTE .
USE AdventureWorks2022;
GO
-- Execute the SELECT statement alone to show the
-- full result set that is used by the cursor.
SELECT LastName, FirstName FROM Person.Person
ORDER BY LastName, FirstName;
-- Declare the cursor.
DECLARE contact_cursor SCROLL CURSOR FOR
SELECT LastName, FirstName FROM Person.Person
ORDER BY LastName, FirstName;
OPEN contact_cursor;
-- Fetch the last row in the cursor.
FETCH LAST FROM contact_cursor;
-- Fetch the row immediately prior to the current row in the cursor.
FETCH PRIOR FROM contact_cursor;
-- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM contact_cursor;
-- Fetch the row that is three rows after the current row.
FETCH RELATIVE 3 FROM contact_cursor;
-- Fetch the row that is two rows prior to the current row.
FETCH RELATIVE -2 FROM contact_cursor;
CLOSE contact_cursor;
DEALLOCATE contact_cursor;
GO
Zobacz też
ZAMKNIJ (Transact-SQL)
DEALLOCATE (Transact-SQL)
DEKLARUJ KURSOR (Transact-SQL)
OTWÓRZ (Transact-SQL)