Pobieranie (języka Transact-SQL)

Pobiera z określonego wiersza Transact-SQL kursor serwera.

Topic link iconKonwencje składni języka Transact-SQL

FETCH 
          [ [ NEXT | PRIOR | FIRST | LAST 
                    | ABSOLUTE { n | @nvar } 
                    | RELATIVE { n | @nvar } 
               ] 
               FROM 
          ] 
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name } 
[ INTO @variable_name [ ,...n ] ] 

Argumenty

  • NASTĘPNY
    Zwraca wartość w wierszu wyniku bezpośrednio po bieżącym wierszu i przyrostach zwracane bieżącego wiersza do wiersza.Jeśli pobranie NEXT jest pierwszym pobrania przed kursor, zwraca pierwszy wiersz zestaw wyników.NEXT jest domyślną opcją pobrania kursor.

  • PRZED
    Zwraca wartość w wierszu wyniku poprzedzającego bieżący wiersz i zmniejsza zwracane bieżącego wiersza do wiersza.Jeśli pobranie poprzedniego jest pierwszym pobrania przed kursorem, jest zwracana bez wiersza i pozostanie kursor umieszczony przed pierwszym wierszem.

  • PIERWSZY
    Zwraca kursor w pierwszym wierszu i umożliwia bieżącego wiersza.

  • OSTATNI
    Zwraca ostatni wiersz kursor i umożliwia bieżącego wiersza.

  • ABSOLUTE { n| **@**nvar}
    Jeśli n or **@**nvar jest dodatnia, zwraca wiersz n wiersze z przodu kursor i sprawia, że zwracane wiersza nowych bieżącego wiersza.Jeśli n or **@**nvar jest ujemna, funkcja zwraca wiersz n wiersze przed końcem kursor i sprawia, że zwracane wiersza nowych bieżącego wiersza.If n or **@**nvar is 0, no rows are returned.n must be an integer constant and **@**nvar must be smallint, tinyint, orint.

  • RELATIVE { n| **@**nvar}
    Jeśli n or **@**nvar jest dodatnia, zwraca wiersz n wierszy poza bieżącym wierszem i sprawia, że zwracane wiersza nowego wiersza w bieżącej.Jeśli n or **@**nvar jest ujemna, funkcja zwraca wiersz n wiersze przed do bieżącego wiersza i sprawia, że zwracane wiersza nowych bieżącego wiersza.Jeśli n or **@**nvar wynosi 0, funkcja zwraca bieżący wiersz.If FETCH RELATIVE is specified with n or **@**nvar set to negative numbers or 0 on the first fetch done against a cursor, no rows are returned.n must be an integer constant and **@**nvar must be smallint, tinyint, orint.

  • GLOBALNE
    Określa, że cursor_name odnosi się do globalnego kursor.

  • cursor_name
    To nazwa kursor otwarte, z którego zostanie wykonane pobrania.Jeśli istnieją globalnym i lokalnym kursor z cursor_name jak ich nazwy cursor_name globalne kursora Jeśli określono GLOBAL i kursora lokalnego, jeśli GLOBAL nie została określona.

  • **@**cursor_variable_name
    Jest nazwa zmiennej kursor odwoływania się do otwartego kursor, z którego zostanie wykonane pobrania.

  • INTO **@**variable_name[ ,*...*n]
    Powoduje, że dane z kolumn pobrania do wprowadzenia do lokalnych zmiennych.Każda zmienna na liście od lewej do prawej, jest skojarzony z odpowiedniej kolumna zestaw wyników kursor.Typ danych każdej zmiennej musi odpowiadać lub być obsługiwanych niejawna konwersja typu danych kolumna odpowiadające im zestaw wyników.Liczba zmiennych musi być taka sama liczba kolumn na liście select kursor.

Remarks

Jeżeli nie określono opcji SCROLL w stylu ISO instrukcja DECLARE kursor, NEXT jest to jedyna opcja pobierania obsługiwane.Jeżeli określono SCROLL w ISO stylów DECLARE kursor, obsługiwane są wszystkie opcje pobierania.

Gdy Transact-SQL DECLARE kursor rozszerzenia są używane, obowiązują następujące reguły:

  • NEXT jest obsługiwana tylko opcja pobierania jest określony FORWARD_ONLY lub FAST_FORWARD.

  • Jeśli DYNAMIC, FORWARD_ONLY lub FAST_FORWARD nie są określone i jeden zestaw KLUCZY, statyczny lub SCROLL są określone, obsługiwane są wszystkie opcje pobierania.

  • Kursory DYNAMIC SCROLL obsługuje wszystkie opcje pobierania z wyjątkiem BEZWZGLĘDNĄ.

Funkcja @@ FETCH_STATUS raportuje stan ostatniej instrukcja pobrania.Te same informacje są zapisywane w fetch_status kursor zwrócony przez kolumnasp_describe_cursor.Informacje o tym stanie należy używać do określenia ważności danych zwracanych przez instrukcję pobrania, przed próbą żadnej operacji przed danymi.Aby uzyskać więcej informacji zobacz @@ FETCH_STATUS (języka Transact-SQL).

Uprawnienia

Pobieranie domyślne uprawnienia do dowolnego użytkownika jest nieprawidłowe.

Przykłady

A.Za pomocą pobrania w prostym kursor

W poniższym przykładzie deklaruje proste kursor w wierszach Person.Contact Tabela z ostatnią nazwą, która rozpoczyna się od B, a FETCH NEXT do kolejnych wierszy. The FETCH statements return the value for the kolumna specified in DECLARE CURSOR as a single-row result zestaw.

USE AdventureWorks
GO
DECLARE contact_cursor CURSOR FOR
SELECT LastName FROM Person.Contact
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.Za pomocą pobrania do przechowywania wartości zmiennych

W poniższym przykładzie jest podobne do przykładu A, chyba że dane wyjściowe z FETCH instrukcje są przechowywane w zmiennych lokalnych zamiast zwracanych bezpośrednio do klient. The PRINT instrukcja combines the variables into a single ciąg and returns them to the klient.

USE AdventureWorks
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.Contact
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.Zadeklarowanie kursor SCROLL i przy użyciu innych opcji pobierania

Poniższy przykład tworzy SCROLL kursor, aby umożliwić pełne możliwości przewijania za pośrednictwem LAST, PRIOR, RELATIVE, a ABSOLUTE Opcje.

USE AdventureWorks
GO
-- Execute the SELECT statement alone to show the 
-- full result set that is used by the cursor.
SELECT LastName, FirstName FROM Person.Contact
ORDER BY LastName, FirstName

-- Declare the cursor.
DECLARE contact_cursor SCROLL CURSOR FOR
SELECT LastName, FirstName FROM Person.Contact
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