Udostępnij za pomocą


PRZYNIEŚ (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza 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_ONLY z opcji lub FAST_FORWARD , NEXT jest jedyną FETCH obsługiwaną opcją.

  • Jeśli DYNAMICparametr , FORWARD_ONLY lub FAST_FORWARD nie zostanie określony, a jeden z KEYSET, STATIClub SCROLL jest określony, wszystkie FETCH opcje są obsługiwane.

  • DYNAMIC SCROLL kursory obsługują wszystkie opcje z FETCH wyjątkiem ABSOLUTE.

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)