Bagikan melalui


sp_cursorprepexec (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure Synapse Analytics AnalyticsPlatform System (PDW)

Mengkompilasi paket untuk pernyataan kursor atau batch yang dikirimkan, lalu membuat dan mengisi kursor. sp_cursorprepexec menggabungkan fungsi dan sp_cursorpreparesp_cursorexecute. Prosedur ini dipanggil dengan menentukan ID = 5 dalam paket aliran data tabular (TDS).

Konvensi sintaks transact-SQL

Sintaks

sp_cursorprepexec prepared handle OUTPUT , cursor OUTPUT , params , statement , options
    [ , scrollopt [ , ccopt [ , rowcount ] ] ]
    [ , '@parameter_name [ , ...n ]' ]

Argumen

handel yang disiapkan

SQL Server menghasilkan pengidentifikasi handel yang disiapkan. handel yang disiapkan diperlukan dan mengembalikan int.

Kursor

Pengidentifikasi kursor yang dihasilkan SQL Server. kursor adalah parameter yang diperlukan yang harus disediakan pada semua prosedur berikutnya yang bertindak berdasarkan kursor ini, misalnya, sp_cursorfetch.

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 .

Catatan

Gunakan string ntext sebagai nilai input saat pernyataan diparameterkan dan nilai PARAMETERIZED_STMT scrollopt AKTIF.

statement

Menentukan kumpulan hasil kursor. Parameter pernyataan diperlukan dan memanggil nilai input ntext, nchar, atau nvarchar .

Catatan

Aturan untuk menentukan nilai pernyataan sama dengan yang untuk sp_cursoropen, dengan pengecualian bahwa jenis data string pernyataan harus ntext.

opsi

Parameter opsional yang mengembalikan deskripsi kolom kumpulan hasil kursor. opsi memerlukan nilai input int berikut.

Nilai Deskripsi
0x0001 RETURN_METADATA

scrollopt

Opsi gulir. scrollopt adalah parameter opsional yang memerlukan salah satu nilai input int berikut.

Nilai Deskripsi
0x0001 SET KUNCI
0x0002 DINAMIS
0x0004 FORWARD_ONLY
0x0008 STATIS
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 kemungkinan bahwa opsi yang diminta tidak sesuai untuk kursor yang ditentukan oleh pernyataan, parameter ini berfungsi sebagai input dan output. Dalam kasus seperti itu, SQL Server menetapkan jenis yang sesuai dan memodifikasi nilai ini.

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 OPTIMIS (sebelumnya dikenal sebagai OPTCC)
0x0008 OPTIMIS (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 OPTIMISITC_ACCEPTABLE

Seperti halnya scrollopt, SQL Server dapat menetapkan nilai yang berbeda dari yang diminta.

rowcount

Parameter opsional yang menandakan jumlah baris buffer pengambilan untuk digunakan dengan AUTO_FETCH. Defaultnya adalah 20 baris. rowcount bertingkah berbeda saat ditetapkan sebagai nilai input versus nilai pengembalian.

Sebagai nilai input Sebagai nilai yang dikembalikan
Ketika AUTO_FETCH ditentukan dengan FAST_FORWARD kursor rowcount mewakili jumlah baris yang akan ditempatkan ke dalam buffer pengambilan. Mewakili jumlah baris dalam tataan hasil. Saat nilai AUTO_FETCH scrollopt ditentukan, rowcount mengembalikan jumlah baris yang diambil ke dalam buffer pengambilan.

parameter_name

Menunjuk satu atau beberapa nama parameter seperti yang didefinisikan dalam argumen params . Harus ada parameter yang disediakan untuk setiap parameter yang disertakan dalam param. Argumen ini tidak diperlukan ketika pernyataan Transact-SQL atau batch dalam param tidak memiliki parameter yang ditentukan.

Mengembalikan nilai kode

Jika param mengembalikan nilai NULL, maka pernyataan tidak diparameterkan.

Contoh

Contoh ini menunjukkan penggunaan sp_cursorprepexec. Ini menjalankan kueri terhadap Person tabel dalam database yang AdventureWorks2022 mengembalikan semua rekaman di mana nama depan adalah "Katherine".

USE AdventureWorks2022;
GO

DECLARE @prep_handle INT,
    @cursor INT,
    @scrollopt INT = 4104,
    @ccopt INT = 8193,
    @rowcnt INT;

EXEC sp_cursorprepexec
    @prep_handle OUTPUT,
    @cursor OUTPUT,
    N'@fName nvarchar(100)',
    N'SELECT FirstName, LastName FROM Person.Person WHERE FirstName = @fName',
    @scrollopt,
    @ccopt,
    @rowcnt OUTPUT,
    'Katherine';

EXEC sp_cursorfetch @cursor;