sp_describe_cursor (T-SQL)
Berlaku untuk: SQL Server
Melaporkan atribut kursor server.
Sintaks
sp_describe_cursor
[ @cursor_return = ] cursor_return OUTPUT
, [ @cursor_source = ] { N'local' | N'global' | N'*cursor_source*' }
, [ @cursor_identity = ] N'cursor_identity'
[ ; ]
Argumen
[ @cursor_return = ] cursor_return OUTPUT
Nama variabel kursor yang dideklarasikan untuk menerima output kursor. @cursor_return adalah parameter OUTPUT dari jenis int, tanpa default, dan tidak boleh dikaitkan dengan kursor apa pun pada saat sp_describe_cursor
itu dipanggil. Kursor yang dikembalikan adalah kursor baca-saja yang dapat digulir, dinamis.
[ @cursor_source = ] { N'local' | N'global' | N'cursor_source' }
Menentukan apakah kursor yang dilaporkan ditentukan dengan menggunakan nama kursor lokal , kursor global , atau variabel kursor. @cursor_source adalah nvarchar(30), tanpa default.
[ @cursor_identity = ] N'cursor_identity'
Nama kursor yang dibuat oleh DECLARE CURSOR
pernyataan. @cursor_identity adalah nvarchar(128), tanpa default.
Jika kursor memiliki
LOCAL
kata kunci, atau default keLOCAL
, @cursor_identity adalahlocal
.Jika kursor memiliki
GLOBAL
kata kunci, atau default keGLOBAL
, @cursor_identity adalahglobal
. @cursor_identity juga dapat menjadi nama kursor server API yang dibuka oleh aplikasi ODBC, lalu dinamai dengan memanggilSQLSetCursorName
.Jika tidak, @cursor_identity adalah nama variabel kursor yang terkait dengan kursor terbuka.
Mengembalikan nilai kode
Tidak ada.
Kursor dikembalikan
sp_describe_cursor
merangkum hasilnya yang ditetapkan dalam parameter output Transact-SQL cursor
. Ini memungkinkan batch Transact-SQL, prosedur tersimpan, dan pemicu untuk bekerja dengan output satu baris pada satu waktu. Ini juga berarti bahwa prosedur tidak dapat dipanggil langsung dari fungsi API database. Parameter cursor
output harus terikat ke variabel program, tetapi API database tidak mendukung parameter atau variabel pengikatan cursor
.
Tabel berikut ini memperlihatkan format kursor yang dikembalikan dengan menggunakan sp_describe_cursor
. Format kursor sama dengan format yang dikembalikan dengan menggunakan sp_cursor_list
.
Nama kolom | Jenis data | Deskripsi |
---|---|---|
reference_name |
nama sysname | Nama yang digunakan untuk merujuk ke kursor. Jika referensi ke kursor melalui nama yang ditentukan pada DECLARE CURSOR pernyataan, nama referensi sama dengan nama kursor. Jika referensi ke kursor melalui variabel, nama referensi adalah nama variabel. |
cursor_name |
nama sysname | Nama kursor dari pernyataan DECLARE CURSOR . Jika kursor dibuat dengan mengatur variabel kursor ke kursor, cursor_name mengembalikan nama variabel kursor. Dalam versi SQL Server yang lebih lama, kolom output ini mengembalikan nama yang dihasilkan sistem. |
cursor_scope |
kecil | 1 = LOCAL 2 = GLOBAL |
status |
int | Nilai yang sama seperti yang dilaporkan CURSOR_STATUS oleh fungsi sistem:1 = Kursor yang dirujuk oleh nama atau variabel kursor terbuka. Jika kursor tidak sensitif, statis, atau set kunci, setidaknya satu baris. Jika kursor dinamis, kumpulan hasil memiliki nol atau lebih baris.0 = Kursor yang dirujuk oleh nama atau variabel kursor terbuka tetapi tidak memiliki baris. Kursor dinamis tidak pernah mengembalikan nilai ini.-1 = Kursor yang dirujuk oleh nama atau variabel kursor ditutup.-2 = Hanya berlaku untuk variabel kursor. Tidak ada kursor yang ditetapkan ke variabel. Mungkin, OUTPUT parameter menetapkan kursor ke variabel, tetapi prosedur tersimpan menutup kursor sebelum kembali.-3 = Variabel kursor atau kursor dengan nama yang ditentukan tidak ada, atau variabel kursor tidak memiliki kursor yang dialokasikan untuknya. |
model |
kecil | 1 = Tidak peka (atau statis)2 = Set kunci3 = Dinamis4 = Maju Cepat |
concurrency |
kecil | 1 = Baca-saja2 = Kunci gulir3 = Optimis |
scrollable |
kecil | 0 = Teruskan saja1 = Dapat digulir |
open_status |
kecil | 0 = Ditutup1 = Buka |
cursor_rows |
desimal(10,0) | Jumlah baris yang memenuhi syarat dalam tataan hasil. Untuk informasi selengkapnya, lihat @@CURSOR_ROWS. |
fetch_status |
smallint | Status pengambilan terakhir pada kursor ini. Untuk informasi selengkapnya, lihat @@FETCH_STATUS.0 = Ambil berhasil.-1 = Ambil gagal atau berada di luar batas kursor.-2 = Baris yang diminta hilang.-9 = Tidak ada pengambilan yang terjadi pada kursor. |
column_count |
smallint | Jumlah kolom dalam tataan hasil kursor. |
row_count |
desimal(10,0) | Jumlah baris yang dipengaruhi oleh operasi terakhir pada kursor. Untuk informasi selengkapnya, lihat @@ROWCOUNT. |
last_operation |
kecil | Operasi terakhir yang dilakukan pada kursor:0 = Tidak ada operasi yang dilakukan pada kursor.1 = OPEN 2 = FETCH 3 = INSERT 4 = UPDATE 5 = DELETE 6 = CLOSE 7 = DEALLOCATE |
cursor_handle |
int | Nilai unik untuk kursor dalam cakupan server. |
Keterangan
sp_describe_cursor
menjelaskan atribut yang global ke kursor server, seperti kemampuan untuk menggulir dan memperbarui. Gunakan sp_describe_cursor_columns
untuk deskripsi atribut kumpulan hasil yang dikembalikan oleh kursor. Gunakan sp_describe_cursor_tables
untuk laporan tabel dasar yang dirujuk oleh kursor. Untuk mendapatkan laporan kursor server Transact-SQL yang terlihat pada koneksi, gunakan sp_cursor_list
.
Pernyataan DECLARE CURSOR
mungkin meminta jenis kursor yang tidak dapat didukung SQL Server menggunakan SELECT
pernyataan yang terkandung dalam DECLARE CURSOR
. SQL Server secara implisit mengonversi kursor ke jenis yang dapat didukungnya menggunakan SELECT
pernyataan . Jika TYPE_WARNING
ditentukan dalam DECLARE CURSOR
pernyataan, SQL Server mengirimkan aplikasi pesan informasi bahwa konversi telah selesai. sp_describe_cursor
kemudian dapat dipanggil untuk menentukan jenis kursor yang telah diimplementasikan.
Izin
Memerlukan keanggotaan dalam peran publik .
Contoh
Contoh berikut membuka kursor global dan menggunakan sp_describe_cursor
untuk melaporkan atribut kursor.
USE AdventureWorks2022;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR STATIC FOR
SELECT LastName
FROM Person.Person;
OPEN abc;
-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor.
DECLARE @Report CURSOR;
-- Execute sp_describe_cursor into the cursor variable.
EXEC master.dbo.sp_describe_cursor
@cursor_return = @Report OUTPUT,
@cursor_source = N'global',
@cursor_identity = N'abc';
-- Fetch all the rows from the sp_describe_cursor output cursor.
FETCH NEXT from @Report;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
FETCH NEXT from @Report;
END
-- Close and deallocate the cursor from sp_describe_cursor.
CLOSE @Report;
DEALLOCATE @Report;
GO
-- Close and deallocate the original cursor.
CLOSE abc;
DEALLOCATE abc;
GO