Bagikan melalui


sp_describe_cursor (T-SQL)

Berlaku untuk: SQL Server

Melaporkan atribut kursor server.

Konvensi sintaks transact-SQL

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 ke LOCAL, @cursor_identity adalah local.

  • Jika kursor memiliki GLOBAL kata kunci, atau default ke GLOBAL, @cursor_identity adalah global. @cursor_identity juga dapat menjadi nama kursor server API yang dibuka oleh aplikasi ODBC, lalu dinamai dengan memanggil SQLSetCursorName.

  • 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 kunci
3 = Dinamis
4 = Maju Cepat
concurrency kecil 1 = Baca-saja
2 = Kunci gulir
3 = Optimis
scrollable kecil 0 = Teruskan saja
1 = Dapat digulir
open_status kecil 0 = Ditutup
1 = 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