sp_cursorprepare (T-SQL)
Berlaku untuk: SQL Server
Mengkompilasi pernyataan kursor atau batch ke dalam rencana eksekusi, tetapi tidak membuat kursor. Pernyataan yang dikompilasi nantinya dapat digunakan oleh sp_cursorexecute
. Prosedur ini, ditambah dengan , memiliki fungsi yang sama dengan sp_cursorexecute
sp_cursoropen
, tetapi dibagi menjadi dua fase. sp_cursorprepare
dipanggil dengan menentukan ID = 3
dalam paket aliran data tabular (TDS).
Sintaks
sp_cursorprepare prepared_handle OUTPUT , params , stmt , options
[ , scrollopt [ , ccopt ] ]
[ ; ]
Argumen
prepared_handle
Pengidentifikasi yang disiapkan handle
yang dihasilkan SQL Server yang mengembalikan nilai int .
prepared_handle kemudian disediakan ke sp_cursorexecute
prosedur untuk membuka kursor. Setelah handel dibuat, handel tersebut ada sampai Anda keluar, atau sampai Anda secara eksplisit menghapusnya melalui sp_cursorunprepare
prosedur.
params
Mengidentifikasi pernyataan berparameter. Definisi param variabel digantikan untuk penanda parameter dalam pernyataan. param adalah parameter yang diperlukan yang memanggil nilai input ntext, nchar, atau nvarchar . NULL
Masukkan nilai jika pernyataan tidak diparameterkan.
Gunakan string ntext sebagai nilai input saat stmt diparameterkan dan nilai PARAMETERIZED_STMT scrollopt aktif.
stmt
Menentukan kumpulan hasil kursor. Parameter stmt diperlukan dan memanggil nilai input ntext, **nchar, atau nvarchar .
Aturan untuk menentukan nilai stmt sama sp_cursoropen
dengan , dengan pengecualian bahwa jenis data string stmt harus ntext.
opsi
Mengembalikan deskripsi kolom kumpulan hasil kursor. Parameter opsi adalah int, dengan default NULL
. Ketika diatur ke 0x0001
, itu berarti RETURN_METADATA
.
scrollopt
Opsi gulir. Parameter scrollopt adalah parameter opsional yang memerlukan salah satu nilai input int berikut.
Nilai | Deskripsi |
---|---|
0x0001 |
KEYSET |
0x0002 |
DYNAMIC |
0x0004 |
FORWARD_ONLY |
0x0008 |
STATIC |
0x10 |
FAST_FORWARD |
0x1000 |
PARAMETERIZED_STMT |
0x2000 |
AUTO_FETCH |
0x4000 |
AUTO_CLOSE |
0x8000 |
CHECK_ACCEPTED_TYPES |
0x10000 |
KEYSET_ACCEPTABLE |
0x20000 |
DYNAMIC_ACCEPTABLE |
0x40000 |
FORWARD_ONLY_ACCEPTABLE |
0x80000 |
STATIC_ACCEPTABLE |
0x100000 |
FAST_FORWARD_ACCEPTABLE |
Karena nilai yang diminta mungkin tidak sesuai untuk kursor yang ditentukan oleh stmt, parameter ini berfungsi sebagai input dan output. Dalam kasus seperti itu, SQL Server menetapkan nilai yang sesuai.
ccopt
Opsi kontrol konkurensi. ccopt adalah parameter opsional yang memerlukan salah satu nilai input int berikut.
Nilai | Deskripsi |
---|---|
0x0001 |
READ_ONLY |
0x0002 |
SCROLL_LOCKS (sebelumnya dikenal sebagai LOCKCC ) |
0x0004 |
OPTIMISTIC (sebelumnya dikenal sebagai OPTCC ) |
0x0008 |
OPTIMISTIC (sebelumnya dikenal sebagai OPTCCVAL ) |
0x2000 |
ALLOW_DIRECT |
0x4000 |
UPDT_IN_PLACE |
0x8000 |
CHECK_ACCEPTED_OPTS |
0x10000 |
READ_ONLY_ACCEPTABLE |
0x20000 |
SCROLL_LOCKS_ACCEPTABLE |
0x40000 |
OPTIMISTIC_ACCEPTABLE |
0x80000 |
OPTIMISTIC_ACCEPTABLE |
Seperti halnya menggulir, SQL Server dapat menetapkan nilai yang berbeda dari yang diminta.
Keterangan
Parameter status RPC adalah salah satu nilai berikut:
Nilai | Deskripsi |
---|---|
0 |
Berhasil |
0x0001 |
Kegagalan |
1FF6 |
Tidak dapat mengembalikan metadata. Catatan: Alasan untuk ini adalah bahwa pernyataan tidak menghasilkan tataan hasil; misalnya, itu adalah INSERT pernyataan atau DDL. |
Contoh
Kode berikut adalah contoh penggunaan sp_cursorprepare
dan sp_cursorexecute
:
DECLARE @handle INT, @p5 INT, @p6 INT;
EXEC sp_cursorprepare @handle OUTPUT,
N'@dbid int',
N'select * from sys.databases where database_id < @dbid',
1,
@p5 OUTPUT,
@p6 OUTPUT;
DECLARE @p1 INT
SET @P1 = @handle;
DECLARE @p2 INT;
DECLARE @p3 INT;
DECLARE @p4 INT;
SET @P6 = 4;
EXEC sp_cursorexecute @p1,
@p2 OUTPUT,
@p3 OUTPUT,
@p4 OUTPUT,
@p5 OUTPUT,
@p6;
EXEC sp_cursorfetch @P2;
EXEC sp_cursorunprepare @handle;
EXEC sp_cursorclose @p2;
Ketika stmt diparameterkan dan nilai scrollopt PARAMETERIZED_STMT
adalah ON
, format string dalam bentuk berikut:
<parameter_name> <data_type> [ ,... n ]