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
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
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
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 DELETE berikutnyaUPDATE. |
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 NEXT.PREVIOUSsp_cursor
rownum adalah parameter yang diperlukan yang memanggil nilai input int .
1Menandakan baris pertama dalam buffer pengambilan.
2, 3, 4, ...nMenandakan baris kedua, ketiga, dan keempat, dan sebagainya.
0Menandakan semua baris dalam buffer pengambilan.
Parameter ini hanya valid untuk digunakan dengan UPDATEnilai , , DELETEREFRESH, atau LOCKoptype.
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 INSERTnilai 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, REFRESHatau LOCK; atau ABSOLUTE dengan atau UPDATEDELETE , nilai optype saling eksklusif.
Klausul SETUPDATE 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
SETPOSITIONtidak memengaruhi titik awal operasi , ,RELATIVEatauNEXTpengambilan apa punPREVIOUS, juga tidak melakukan pembaruan atau penghapusan apa pun yang dilakukan menggunakansp_cursorantarmuka. Angka apa pun yang tidak menentukan baris dalam buffer pengambilan, menghasilkan posisi yang diatur ke1, tanpa kesalahan yang dikembalikan. SetelahSETPOSITIONdijalankan, posisi tetap berlaku sampai operasi berikutnyasp_cursorfetch, operasi T-SQLFETCH, atausp_cursorSETPOSITIONoperasi melalui kursor yang sama. Operasi berikutnyasp_cursorfetchmengatur posisi kursor ke baris pertama dalam buffer pengambilan baru sementara panggilan kursor lainnya tidak memengaruhi nilai posisi.SETPOSITIONdapat ditautkan olehORklausul denganREFRESH, ,UPDATEDELETE, atauLOCKuntuk 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_cursorSETPOSITION operasi dilakukan pada kursor yang sama.
SETPOSITIONdapat ditautkan oleh OR klausul dengan REFRESH, , UPDATEDELETE, 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
UPDATElengkapINSERTatau menggunakan beberapa parameter untuk mengirimkan bagian dariUPDATEpernyataan 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.