Pobieranie (Transact-SQL)
Pobiera określonego wiersza z Transact-SQL serwera kursor.
Składnia
FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
]
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }
[ INTO @variable_name [ ,...n ] ]
Argumenty
DALEJ
Zwraca niezwłocznie po bieżącym wierszu i skoki bieżącego wiersza do wiersza zwracana wiersz wyników.W przypadku pobrania NASTĘPNEJ pierwszego pobrania przed kursor, zwraca pierwszy wiersz w zestaw wyników.NASTĘPNIE jest domyślna opcja pobrania kursor .PRZED
Zwraca bezpośrednio poprzedzającego bieżący wiersz i zmniejsza bieżącego wiersza do wiersza zwracana wiersz wyników.W przypadku uprzedniego pobrania pierwszego pobrania przed kursor, zwracane bez wiersza i pozostawia się kursor umieszczony przed pierwszym wierszem.PIERWSZY
Zwraca pierwszy wiersz kursor i czyni go bieżącego wiersza.OSTATNI
Zwraca ostatni wiersz kursor i czyni go bieżącego wiersza.ABSOLUTE { n| @nvar}
Jeśli n lub @nvar jest dodatnia, zwraca wiersz n wierszy z przodu kursor i sprawia, że zwracanych wierszy nowego bieżącego wiersza.Jeśli n lub @nvar jest ujemna, funkcja zwraca wiersz n wierszy przed końcem kursor i sprawia, że zwracanych wierszy nowego bieżącego wiersza.Jeśli n lub @nvar jest równa 0, nie są zwracane żadne wiersze.n musi być liczbą całkowitą stała i @nvar musi być smallint, tinyint, lub int.RELATIVE { n| @nvar}
Jeśli n lub @nvar jest dodatnia, zwraca wiersz n wierszy poza bieżący wiersz i sprawia, że zwracane wiersza nowych bieżącego wiersza.Jeśli n lub @nvar jest ujemna, funkcja zwraca wiersz n wiersze przed bieżącym wierszem i sprawia, że zwracane wiersza nowy bieżącego wiersza.Jeśli n lub @nvar jest równy 0, funkcja zwraca bieżący wiersz.Jeśli pobranie WZGLĘDNE jest określany za pomocą n lub @nvar zestaw liczb ujemnych lub 0 na pierwsze pobranie Sporządzono przeciwko kursor, są zwracane żadne wiersze.n musi być liczbą całkowitą stała i @nvar musi być smallint, tinyint, lub int.GLOBALNE
Określa, żecursor_name odnosi się do globalnego kursor.cursor_name
Jest nazwą otwarte z którego należy dokonać pobrania kursor .Jeśli globalnym i lokalnym kursor istnieje z cursor_name jako swojej nazwy cursor_name globalnego kursor , jeśli określony szablon GLOBALNY oraz lokalny kursor , jeżeli nie określono GLOBALNEGO.@cursor_variable_name
Odwołuje się nazwa zmiennej kursor do otwartych z którego należy dokonać pobrania kursor .INTO @variable_name,...n
Zezwala na danych z kolumn pobranie umieszczanych w zmiennych lokalnych.Każda zmienna na liście od lewej do prawej, jest skojarzony z odpowiedniej kolumna w kursor zestaw wyników.Typ danych każdej zmiennej musi odpowiadać lub być obsługiwane niejawna konwersja typu danych odpowiednich zestaw wyników kolumna.Liczba zmiennych musi odpowiadać liczba kolumn na liście wybierz kursor .
Uwagi
DALEJ jest obsługiwana tylko opcja pobrania w stylu ISO DECLARE CURSOR instrukcjanie określono opcję PRZEWIJANIA.Jeżeli PRZEWIJANIA określono w ISO styl DECLARE CURSOR, obsługiwane są wszystkie opcje pobierania.
Gdy Transact-SQL używane są rozszerzenia kursor DECLARE, reguły te stosuje się:
NASTĘPNIE jest obsługiwana tylko opcja pobrania określonych FORWARD_ONLY lub FAST_FORWARD.
Jeśli DYNAMICZNY, FORWARD_ONLY lub FAST_FORWARD nie są określone i określić jeden zestaw KLUCZY, STATYCZNE lub PRZEWIJANIA, obsługiwane są wszystkie opcje pobierania.
Kursory PRZEWIJANIA dynamiczne obsługują wszystkie opcje pobierania z wyjątkiem BEZWZGLĘDNĄ.
@@ FETCH_STATUS funkcja raportuje stan ostatniego pobrania instrukcja.Te same informacje są zapisywane w fetch_status kolumna kursor zwrócony przez sp_describe_cursor.Informacje o stanie należy używany do sprawdzania poprawności danych zwróconych przez pobieranie instrukcja przed próbą wszelkie działania przeciwko danych.Aby uzyskać więcej informacji, zobacz FETCH_STATUS @@ (Transact-SQL).
Uprawnienia
FETCH domyślne uprawnienia do prawidłowego użytkownika.
Przykłady
A.Za pomocą pobrania w prostych kursor
Poniższy przykład deklaruje proste kursor dla wierszy w Person.Person tabela o nazwie ostatniego, który zaczyna się od Bi korzysta z FETCH NEXT do kolejnych wierszy.FETCH Instrukcji zwracają wartość dla kolumna określone w DECLARE CURSOR jako pojedynczego wiersza, zestaw wyników.
USE AdventureWorks2008R2;
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.Za pomocą pobrania do przechowywania wartości zmiennych
Poniższy przykład jest podobne do A, z wyjątkiem danych wyjściowych z FETCH sprawozdania są przechowywane w zmiennych lokalnych zamiast zwracanych bezpośrednio do klient.PRINTinstrukcja scala zmiennych w jeden ciąg i zwraca je do klient.
USE AdventureWorks2008R2;
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 PRZEWIJANIA kursor 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, i ABSOLUTE Opcje.
USE AdventureWorks2008R2;
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 także