Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Membuka kursor.
sp_cursoropen menentukan pernyataan SQL yang terkait dengan opsi kursor dan kursor, lalu mengisi kursor.
sp_cursoropen setara dengan kombinasi pernyataan DECLARE_CURSOR Transact-SQL dan OPEN. Prosedur ini dipanggil dengan menentukan ID = 2 dalam paket aliran data tabular (TDS).
Sintaks
sp_cursoropen cursor OUTPUT
, stmt
[ , scrollopt [ OUTPUT ]
[ , ccopt [ OUTPUT ]
[ , rowcount OUTPUT [ , boundparam ] [ , ...n ] ] ] ]
[ ; ]
Argumen
Penting
Argumen untuk prosedur tersimpan yang diperluas harus dimasukkan dalam urutan tertentu seperti yang dijelaskan di bagian Sintaks. Jika parameter dimasukkan di luar urutan, pesan kesalahan terjadi.
Kursor
Pengidentifikasi kursor yang dihasilkan SQL Server.
kursor adalah handle nilai yang harus disediakan pada semua prosedur berikutnya yang melibatkan kursor, seperti sp_cursorfetch. Parameter kursor adalah int dan tidak boleh NULL.
kursor memungkinkan beberapa kursor aktif pada satu koneksi database.
stmt
Parameter yang diperlukan yang menentukan tataan hasil kursor. Setiap string kueri yang valid (sintaks dan pengikatan) dari jenis string apa pun (terlepas dari Unicode, ukuran, dll.) dapat berfungsi sebagai jenis nilai stmt yang valid.
scrollopt
Opsi gulir. Parameter scrollopt adalah int, dengan default NULL, dan bisa menjadi salah satu nilai 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 kemungkinan bahwa nilai yang diminta 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 |
OPTIMISITC_ACCEPTABLE |
Seperti halnya scrollopt, SQL Server dapat mengambil alih nilai ccopt yang diminta.
rowcount
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 |
|---|---|
AUTO_FETCH
Saat nilai scrollopt ditentukan, rowcount mewakili jumlah baris yang akan ditempatkan ke dalam buffer pengambilan.Catatan: > 0 adalah nilai yang valid ketika AUTO_FETCH ditentukan, tetapi diabaikan. |
Mewakili jumlah baris dalam tataan hasil, kecuali ketika nilai scrolloptAUTO_FETCH ditentukan. |
boundparam
Menandakan penggunaan parameter tambahan.
boundparam adalah parameter opsional yang harus ditentukan jika nilai scrolloptPARAMETERIZED_STMT diatur ke ON.
Mengembalikan nilai kode
Jika tidak ada kesalahan yang dimunculkan, sp_cursoropen mengembalikan salah satu nilai berikut.
| Nilai | Deskripsi |
|---|---|
0 |
Prosedur berhasil dijalankan. |
0x0001 |
Terjadi kesalahan selama eksekusi (kesalahan kecil, tidak cukup parah untuk memunculkan kesalahan dalam operasi). |
0x0002 |
Operasi asinkron sedang berlangsung. |
0x0002 |
Operasi FETCH sedang dalam proses. |
A |
Kursor ini dibatalkan alokasinya dan tidak tersedia. |
Ketika kesalahan dimunculkan, nilai yang dikembalikan mungkin tidak konsisten dan akurasi tidak dapat dijamin.
Saat parameter rowcount ditentukan sebagai nilai pengembalian, kumpulan hasil berikut terjadi.
| Nilai | Deskripsi |
|---|---|
-1 |
Dikembalikan jika jumlah baris tidak diketahui atau tidak berlaku. |
-n |
Dikembalikan ketika populasi asinkron berlaku. Mewakili jumlah baris yang ditempatkan ke dalam buffer pengambilan saat nilai scrolloptAUTO_FETCH ditentukan. |
Jika RPC sedang digunakan, nilai yang dikembalikan adalah sebagai berikut.
| Nilai | Deskripsi |
|---|---|
0 |
Prosedur berhasil. |
1 |
Prosedur gagal. |
2 |
Kursor set kunci sedang dihasilkan secara asinkron. |
16 |
Kursor maju cepat ditutup secara otomatis. |
sp_cursoropen Jika prosedur berhasil dijalankan, parameter pengembalian RPC dan tataan hasil dengan informasi format kolom TDS (0xa0 dan 0xa1 pesan) dikirim. Jika tidak berhasil, satu atau beberapa pesan kesalahan TDS dikirim. Dalam kedua kasus, tidak ada data baris yang dikembalikan dan DONE jumlah pesannya adalah 0.
0x81 dikembalikan (standar untuk SELECT pernyataan) bersama dengan 0xa5 aliran token dan 0xa4 .
Keterangan
Parameter stmt
Jika stmt menentukan eksekusi prosedur tersimpan, parameter input mungkin didefinisikan sebagai konstanta sebagai bagian dari string stmt , atau ditentukan sebagai argumen boundparam . Variabel yang dideklarasikan dapat diteruskan sebagai parameter terikat dengan cara ini.
Konten yang diizinkan dari parameter stmt bergantung pada apakah ALLOW_DIRECT ditautkan oleh OR ke nilai ccopt lainnya:
Jika
ALLOW_DIRECTtidak ditentukan, baik Transact-SQLSELECTatauEXECUTEpernyataan yang memanggil prosedur tersimpan yang berisi satuSELECTpernyataan harus digunakan. Selain itu,SELECTpernyataan harus memenuhi syarat sebagai kursor; artinya, tidak dapat berisi kata kunciSELECT INTOatauFOR BROWSE.Jika
ALLOW_DIRECTditentukan, ini dapat mengakibatkan satu atau beberapa pernyataan Transact-SQL, termasuk pernyataan yang menjalankan prosedur tersimpan lainnya dengan beberapa pernyataan. Pernyataan non-atauSELECTpernyataan apa punSELECTyang berisi kata kunciSELECT INTOatauFOR BROWSEdijalankan, dan tidak menghasilkan pembuatan kursor. Hal yang sama berlaku untuk pernyataan apa punSELECTyang disertakan dalam batch beberapa pernyataan. Dalam kasus di manaSELECTpernyataan berisi klausul yang hanya berkaitan dengan kursor, klausa tersebut diabaikan. Misalnya, ketika nilai ccopt adalah0x2002, ini adalah permintaan untuk:Kursor dengan kunci gulir, jika hanya ada satu
SELECTpernyataan yang memenuhi syarat sebagai kursor, atauEksekusi pernyataan langsung jika ada beberapa pernyataan, satu pernyataan non-
SELECT, atauSELECTpernyataan yang tidak memenuhi syarat sebagai kursor.
Parameter scrollopt
Lima nilai scrollopt pertama (KEYSEY, , DYNAMIC, FORWARD_ONLYSTATIC, dan FAST_FORWARD) saling eksklusif.
PARAMETERIZED_STMT dan CHECK_ACCEPTED_TYPES dapat ditautkan dengan OR ke salah satu dari lima nilai pertama.
AUTO_FETCH dan AUTO_CLOSE dapat ditautkan dengan OR ke FAST_FORWARD.
Jika CHECK_ACCEPTED_TYPES adalah ON, setidaknya salah satu dari lima nilai scrollopt terakhir (KEYSET_ACCEPTABLE, , DYNAMIC_ACCEPTABLE, FORWARD_ONLY_ACCEPTABLESTATIC_ACCEPTABLE, atau FAST_FORWARD_ACCEPTABLE) juga harus ON.
STATIC kursor selalu dibuka sebagai READ_ONLY. Ini berarti bahwa tabel yang mendasar tidak dapat diperbarui melalui kursor ini.
Parameter ccopt
Empat nilai ccopt pertama (READ_ONLY, SCROLL_LOCKS, dan kedua OPTIMISTIC nilai) saling eksklusif.
Catatan
Memilih salah satu dari empat nilai ccopt pertama menentukan apakah kursor bersifat baca-saja, atau jika metode penguncian atau optimis digunakan untuk mencegah pembaruan yang hilang.
Jika nilai ccopt tidak ditentukan, nilai defaultnya adalah OPTIMISTIC.
ALLOW_DIRECT dan CHECK_ACCEPTED_TYPES dapat ditautkan dengan OR ke salah satu dari empat nilai pertama.
UPDT_IN_PLACE dapat ditautkan dengan OR ke READ_ONLY, SCROLL_LOCKS, atau salah OPTIMISTIC satu nilai.
Jika CHECK_ACCEPTED_TYPES adalah ON, setidaknya salah satu dari empat nilai ccopt terakhir (READ_ONLY_ACCEPTABLE, SCROLL_LOCKS_ACCEPTABLE, dan salah OPTIMISTIC_ACCEPTABLE satu nilai) juga harus AKTIF.
Diposisikan dan fungsi mungkin hanya dilakukan dalam buffer pengambilan dan hanya jika UPDATE sama atau DELETE.SCROLL_LOCKSOPTIMISTIC Jika SCROLL_LOCKS merupakan nilai yang ditentukan, operasi dijamin berhasil. Jika OPTIMISTIC adalah nilai yang ditentukan, operasi gagal jika baris berubah sejak terakhir diambil.
Alasan kegagalan ini adalah ketika OPTIMISTIC adalah nilai yang ditentukan, fungsi kontrol mata uang optimis dilakukan dengan membandingkan tanda waktu atau nilai checksum, seperti yang ditentukan oleh SQL Server. Jika salah satu baris ini tidak cocok, operasi gagal.
Menentukan UPDT_IN_PLACE sebagai nilai pengembalian mengatur hasil berikut:
Jika tidak diatur saat melakukan pembaruan yang diposisikan pada tabel dengan indeks unik, kursor menghapus baris dari tabel kerjanya dan menyisipkannya di akhir salah satu kolom kunci yang digunakan oleh kursor, yang mengubah kolom tersebut.
Jika diatur
ON, kursor memperbarui kolom kunci di baris asli tabel kerja.
Parameter bound_param
Nama parameter harus paramdef ketika PARAMETERIZED_STMT ditentukan, sesuai dengan pesan kesalahan dalam kode. Ketika PARAMETERIZED_STMT tidak ditentukan, tidak ada nama yang ditentukan dalam pesan kesalahan.
Pertimbangan RPC
Bendera input RPC RETURN_METADATA dapat diatur ke 0x0001 untuk meminta agar kursor memilih metadata daftar dikembalikan di aliran TDS.
Contoh
J. Parameter bound_param
Parameter apa pun setelah kelima diteruskan ke rencana pernyataan sebagai parameter input. Parameter pertama tersebut harus berupa string dalam formulir berikut:
<parameter_name> <data_type> [ ,... n ]
Parameter berikutnya digunakan untuk meneruskan nilai yang akan digantikan dalam <parameter_name> pernyataan.