Bagikan melalui


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_cursorexecutesp_cursoropen, tetapi dibagi menjadi dua fase. sp_cursorprepare dipanggil dengan menentukan ID = 3 dalam paket aliran data tabular (TDS).

Konvensi sintaks transact-SQL

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_cursoropendengan , 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 ]