FETCH (Transact-SQL)
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Mengambil baris tertentu dari kursor server Transact-SQL.
Sintaks
FETCH
[ [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar }
| RELATIVE { n | @nvar }
]
FROM
]
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }
[ INTO @variable_name [ ,...n ] ]
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.
DULU
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 CURSOR
ISO, semua FETCH
opsi didukung.
Ketika ekstensi kursor DEKLARASI Transact-SQL digunakan, aturan ini berlaku:
Jika salah satu
FORWARD_ONLY
atau ditentukan,NEXT
adalah satu-satunyaFETCH
FAST_FORWARD
opsi yang didukung.Jika
DYNAMIC
,FORWARD_ONLY
atauFAST_FORWARD
tidak ditentukan, dan salah satu dariKEYSET
,STATIC
, atauSCROLL
ditentukan, semuaFETCH
opsi didukung.DYNAMIC SCROLL
kursor mendukung semuaFETCH
opsi kecualiABSOLUTE
.
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 LAST
opsi , , PRIOR
RELATIVE
, 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)