sp_cursor (T-SQL)
Berlaku untuk: SQL Server
Permintaan diposisikan pembaruan. Prosedur ini melakukan operasi pada satu atau beberapa baris dalam buffer pengambilan kursor. sp_cursor
dipanggil dengan menentukan ID = 1
dalam paket aliran data tabular (TDS).
Sintaks
sp_cursor cursor , optype , rownum , table
[ , value [ ...n ] ]
[ ; ]
Argumen
Kursor
Handel kursor. Parameter kursor adalah int, dan tidak boleh NULL
. Parameter ini adalah nilai yang handle
dihasilkan oleh Mesin Database dan dikembalikan oleh sp_cursoropen
prosedur.
optype
Parameter yang diperlukan yang menunjuk operasi apa yang dilakukan kursor. Parameter optype memerlukan salah satu nilai berikut.
Nilai | Nama | Deskripsi |
---|---|---|
0X0001 |
UPDATE |
Digunakan untuk memperbarui satu atau beberapa baris dalam buffer pengambilan. Baris yang ditentukan dalam rownum diakses kembali dan diperbarui. |
0x0002 |
DELETE |
Digunakan untuk menghapus satu atau beberapa baris dalam buffer pengambilan. Baris yang ditentukan dalam rownum diakses kembali dan dihapus. |
0X0004 |
INSERT |
Menyisipkan data tanpa membangun INSERT pernyataan. |
0X0008 |
REFRESH |
Digunakan untuk mengisi ulang buffer dari tabel yang mendasar dan dapat digunakan untuk menyegarkan baris jika pembaruan atau penghapusan gagal karena kontrol konkurensi optimis, atau setelah UPDATE . |
0X10 |
LOCK |
Menyebabkan kunci pembaruan (U) diperoleh pada halaman yang berisi baris yang ditentukan. Kunci ini kompatibel dengan kunci bersama (S) tetapi tidak dengan kunci eksklusif (X) atau kunci pembaruan lainnya. Dapat digunakan untuk menerapkan penguncian jangka pendek. |
0X20 |
SETPOSITION |
Hanya digunakan ketika program akan mengeluarkan pernyataan atau UPDATE berikutnyaDELETE . |
0X40 |
ABSOLUTE |
Hanya dapat digunakan dengan UPDATE atau DELETE . ABSOLUTE hanya digunakan dengan KEYSET kursor (diabaikan untuk DYNAMIC kursor) dan STATIC kursor tidak dapat diperbarui.Catatan: Jika ABSOLUTE ditentukan pada baris dalam set kunci yang belum diambil, operasi mungkin gagal pemeriksaan konkurensi dan hasil pengembalian tidak dapat dijamin. |
rownum
Menentukan baris mana dalam buffer pengambilan yang dioperasikan kursor, pembaruan, atau penghapusan. Parameter ini tidak memengaruhi titik awal operasi , , atau pengambilan apa punRELATIVE
, atau pembaruan atau penghapusan apa pun yang dilakukan menggunakan sp_cursor
.PREVIOUS
NEXT
rownum adalah parameter yang diperlukan yang memanggil nilai input int .
1
Menandakan baris pertama dalam buffer pengambilan.
2, 3, 4, ...n
Menandakan baris kedua, ketiga, dan keempat, dan sebagainya.
0
Menandakan semua baris dalam buffer pengambilan.
Parameter ini hanya valid untuk digunakan dengan UPDATE
nilai , , REFRESH
DELETE
, atau LOCK
optype.
tabel
Nama tabel yang mengidentifikasi tabel yang diterapkan optype ketika definisi kursor melibatkan gabungan, atau nama kolom ambigu dikembalikan oleh parameter nilai . Jika tidak ada tabel tertentu yang ditunjuk, defaultnya adalah tabel pertama dalam FROM
klausa. Parameter tabel bersifat opsional, dan memerlukan nilai input string. String dapat ditentukan sebagai karakter apa pun atau jenis data Unicode, atau nama tabel multi-bagian.
value
Digunakan untuk menyisipkan atau memperbarui nilai. Parameter string nilai hanya digunakan dengan UPDATE
dan INSERT
nilai optype . String dapat ditentukan sebagai karakter apa pun atau jenis data Unicode.
Nama parameter untuk nilai dapat ditetapkan oleh pengguna.
Mengembalikan nilai kode
0
(berhasil) atau 1
(kegagalan).
Keterangan
Parameter optype
Kecuali untuk kombinasi SETPOSITION
dengan UPDATE
, , DELETE
, REFRESH
atau LOCK
; atau ABSOLUTE
dengan atau DELETE
UPDATE
, nilai optype saling eksklusif.
Klausul SET
UPDATE
nilai dibangun dari parameter nilai .
Salah satu manfaat menggunakan INSERT <optype>
nilai adalah Anda dapat menghindari konversi data non-karakter menjadi format karakter untuk penyisipan. Nilai ditentukan dengan cara yang sama seperti UPDATE
. Jika ada kolom yang diperlukan tidak disertakan, maka INSERT
akan gagal.
- Nilai
SETPOSITION
tidak memengaruhi titik awal operasi , ,NEXT
atauPREVIOUS
pengambilan apa punRELATIVE
, juga tidak melakukan pembaruan atau penghapusan apa pun yang dilakukan menggunakansp_cursor
antarmuka. Angka apa pun yang tidak menentukan baris dalam buffer pengambilan, menghasilkan posisi yang diatur ke1
, tanpa kesalahan yang dikembalikan. SetelahSETPOSITION
dijalankan, posisi tetap berlaku sampai operasi berikutnyasp_cursorfetch
, operasi T-SQLFETCH
, atausp_cursor
SETPOSITION
operasi melalui kursor yang sama. Operasi berikutnyasp_cursorfetch
mengatur posisi kursor ke baris pertama dalam buffer pengambilan baru sementara panggilan kursor lainnya tidak memengaruhi nilai posisi.SETPOSITION
dapat ditautkan olehOR
klausul denganREFRESH
, ,UPDATE
DELETE
, atauLOCK
untuk mengatur nilai posisi ke baris terakhir yang dimodifikasi.
Jika baris dalam buffer pengambilan tidak ditentukan melalui parameter rownum , posisi diatur ke 1, tanpa kesalahan yang dikembalikan. Setelah posisi diatur, posisi tetap berlaku sampai operasi berikutnya sp_cursorfetch
, operasi T-SQL FETCH
, atau sp_cursor
SETPOSITION
operasi dilakukan pada kursor yang sama.
SETPOSITION
dapat ditautkan oleh OR
klausul dengan REFRESH
, , UPDATE
DELETE
, atau LOCK
untuk mengatur posisi kursor ke baris terakhir yang dimodifikasi.
Parameter rownum
Jika ditentukan, parameter rownum dapat ditafsirkan sebagai nomor baris dalam set kunci alih-alih nomor baris dalam buffer pengambilan. Pengguna bertanggung jawab untuk memastikan bahwa kontrol konkurensi dipertahankan. Ini berarti bahwa untuk SCROLL_LOCKS
kursor, Anda harus mempertahankan kunci secara independen pada baris yang diberikan (yang dapat dilakukan melalui transaksi). Untuk OPTIMISTIC
kursor, Anda sebelumnya harus mengambil baris untuk melakukan operasi ini.
Parameter tabel
Jika nilai optype adalah UPDATE
atau INSERT
dan pernyataan pembaruan atau penyisipan lengkap dikirimkan sebagai parameter nilai, nilai yang ditentukan untuk tabel diabaikan.
Catatan
Berkaitan dengan tampilan, hanya satu tabel yang berpartisipasi dalam tampilan yang mungkin dimodifikasi. Nama kolom parameter nilai harus mencerminkan nama kolom dalam tampilan, tetapi nama tabel dapat berupa tabel dasar yang mendasar (dalam hal ini sp_cursor
menggantikan nama tampilan).
Parameter nilai
Ada dua alternatif untuk aturan untuk menggunakan nilai seperti yang dinyatakan sebelumnya di bagian Argumen:
Anda dapat menggunakan nama yang sebelumnya ditambahkan
@
ke nama kolom dalam daftar pilih untuk parameter nilai bernama apa pun. Salah satu keuntungan dari alternatif ini adalah bahwa konversi data mungkin tidak diperlukan.Gunakan parameter untuk mengirimkan pernyataan atau
INSERT
lengkapUPDATE
atau menggunakan beberapa parameter untuk mengirimkan bagian dariUPDATE
pernyataan atauINSERT
, yang kemudian dibangun mesin database menjadi pernyataan lengkap. Contoh dapat ditemukan di bagian Contoh nanti di artikel ini.
Contoh
Parameter nilai alternatif menggunakan
Untuk PEMBARUAN
Saat parameter tunggal digunakan, UPDATE
pernyataan mungkin dikirimkan menggunakan sintaks berikut:
[ [ UPDATE <table_name> ] SET ] { <column name> = expression } [ , ...n ]
Jika UPDATE <table_name>
ditentukan, nilai apa pun yang ditentukan untuk parameter tabel diabaikan.
Saat beberapa parameter digunakan, parameter pertama harus berupa string dalam formulir berikut:
[ SET ] <column name> = expression [ , ...n ]
Parameter berikutnya harus dalam bentuk:
<column name> = expression [ , ...n ]
Dalam hal ini, <table_name>
dalam pernyataan pembaruan yang dibuat adalah yang ditentukan atau default oleh parameter tabel .
Untuk INSERT
Saat parameter tunggal digunakan, INSERT
pernyataan mungkin dikirimkan menggunakan sintaks berikut:
[ [ INSERT [ INTO ] <table_name> ] VALUES ] ( <expression> [ , ...n ] )
Jika INSERT <table_name>
ditentukan, nilai apa pun yang ditentukan untuk parameter tabel diabaikan.
Saat beberapa parameter digunakan, parameter pertama harus berupa string dalam formulir berikut:
[ VALUES ] ( <expression> [ , ...n ] )
Parameter berikutnya harus dalam bentuk expression [ , ...n ]
, kecuali di mana VALUES
ditentukan, dalam hal ini harus ada di belakang )
setelah ekspresi terakhir. Dalam hal ini, <table_name>
dalam pernyataan yang dibuat UPDATE
adalah yang ditentukan atau default oleh parameter tabel .
Catatan
Dimungkinkan untuk mengirimkan satu parameter sebagai parameter bernama, misalnya @values
. Dalam hal ini tidak ada parameter bernama lain yang dapat digunakan.