FETCH (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Mengambil baris tertentu dari kursor server Transact-SQL.

Konvensi sintaks transact-SQL

Sintaksis

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

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

NEXT
Mengembalikan baris hasil segera setelah baris saat ini dan menaikkan baris saat ini ke baris yang dikembalikan. Jika FETCH NEXT merupakan pengambilan pertama terhadap kursor, itu mengembalikan baris pertama dalam tataan hasil. NEXT adalah opsi pengambilan kursor default.

SEBELUMNYA
Mengembalikan baris hasil segera sebelum baris saat ini, dan mengurangi baris saat ini ke baris yang dikembalikan. Jika FETCH PRIOR adalah pengambilan pertama terhadap kursor, tidak ada baris yang dikembalikan dan kursor dibiarkan diposisikan sebelum baris pertama.

PERTAMA
Mengembalikan baris pertama dalam kursor dan menjadikannya baris saat ini.

LAST
Mengembalikan baris terakhir dalam kursor dan menjadikannya baris saat ini.

ABSOLUTE { n| @nvar}
Jika n atau @nvar positif, mengembalikan baris n baris dari depan kursor dan menjadikan baris yang dikembalikan sebagai baris baru saat ini. Jika n atau @nvar negatif, mengembalikan baris n baris sebelum akhir kursor dan menjadikan baris yang dikembalikan sebagai baris baru saat ini. Jika n atau @nvar adalah 0, tidak ada baris yang dikembalikan. n harus berupa konstanta bilangan bulat dan @nvar harus kecil, kecil, atau int.

RELATIVE { n| @nvar}
Jika n atau @nvar positif, mengembalikan baris n baris di luar baris saat ini dan menjadikan baris yang dikembalikan sebagai baris baru saat ini. Jika n atau @nvar negatif, mengembalikan baris n baris sebelum baris saat ini dan menjadikan baris yang dikembalikan sebagai baris baru saat ini. Jika n atau @nvar adalah 0, mengembalikan baris saat ini. Jika FETCH RELATIVE ditentukan dengan n atau @nvar diatur ke angka negatif atau 0 pada pengambilan pertama yang dilakukan terhadap kursor, tidak ada baris yang dikembalikan. n harus berupa konstanta bilangan bulat dan @nvar harus kecil, kecil, atau int.

GLOBAL
Menentukan bahwa cursor_name mengacu pada kursor global.

cursor_name
Adalah nama kursor terbuka tempat pengambilan harus dibuat. Jika kursor global dan lokal ada dengan cursor_name sebagai namanya, cursor_name ke kursor global jika GLOBAL ditentukan dan ke kursor lokal jika GLOBAL tidak ditentukan.

@cursor_variable_name
Adalah nama variabel kursor yang mereferensikan kursor terbuka tempat pengambilan harus dibuat.

INTO @variable_name[ ,...n]
Memungkinkan data dari kolom pengambilan ditempatkan ke dalam variabel lokal. Setiap variabel dalam daftar, dari kiri ke kanan, dikaitkan dengan kolom yang sesuai dalam kumpulan hasil kursor. Jenis data dari setiap variabel harus cocok atau menjadi konversi implisit yang didukung dari jenis data dari kolom kumpulan hasil yang sesuai. Jumlah variabel harus cocok dengan jumlah kolom dalam daftar pemilihan kursor.

Keterangan

SCROLL Jika opsi tidak ditentukan dalam pernyataan gaya DECLARE CURSOR ISO, NEXT adalah satu-satunya FETCH opsi yang didukung. Jika SCROLL ditentukan dalam gaya DECLARE CURSORISO, semua FETCH opsi didukung.

Ketika ekstensi kursor DEKLARASI Transact-SQL digunakan, aturan ini berlaku:

  • Jika salah satu FORWARD_ONLY atau ditentukan, NEXT adalah satu-satunya FETCHFAST_FORWARD opsi yang didukung.

  • Jika DYNAMIC, FORWARD_ONLY atau FAST_FORWARD tidak ditentukan, dan salah satu dari KEYSET, STATIC, atau SCROLL ditentukan, semua FETCH opsi didukung.

  • DYNAMIC SCROLL kursor mendukung semua FETCH opsi kecuali ABSOLUTE.

Fungsi melaporkan @@FETCH_STATUS status pernyataan terakhir FETCH . Informasi yang sama direkam di kolom fetch_status di kursor yang dikembalikan oleh sp_describe_cursor. Informasi status ini harus digunakan untuk menentukan validitas data yang FETCH dikembalikan oleh pernyataan sebelum mencoba operasi apa pun terhadap data tersebut. Untuk informasi selengkapnya, lihat @@FETCH_STATUS (Transact-SQL).

Izin

Izin untuk FETCH default ke pengguna yang valid.

Contoh

J. Menggunakan FETCH dalam kursor sederhana

Contoh berikut mendeklarasikan kursor sederhana untuk baris dalam Person.Person tabel dengan nama belakang yang dimulai dengan B, dan menggunakan FETCH NEXT untuk menelusuri baris. Pernyataan FETCH mengembalikan nilai untuk kolom yang ditentukan dalam DECLARE CURSOR sebagai tataan hasil baris tunggal.

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. Menggunakan FETCH untuk menyimpan nilai dalam variabel

Contoh berikut mirip dengan contoh A, kecuali output FETCH pernyataan disimpan dalam variabel lokal alih-alih dikembalikan langsung ke klien. Pernyataan menggabungkan PRINT variabel ke dalam satu string dan mengembalikannya ke klien.

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. Mendeklarasikan kursor SCROLL dan menggunakan opsi FETCH lainnya

Contoh berikut membuat SCROLL kursor untuk memungkinkan kemampuan gulir penuh melalui LASTopsi , , PRIORRELATIVE, dan 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  

Lihat Juga

TUTUP (T-SQL)
DEALLOCATE (Transact-SQL)
DEKLARASIKAN KURSOR (Transact-SQL)
BUKA (Transact-SQL)