Bagikan melalui


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).

Konvensi sintaks transact-SQL

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 UPDATEnilai , , REFRESHDELETE, 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, REFRESHatau LOCK; atau ABSOLUTE dengan atau DELETEUPDATE , 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 , , NEXTatau PREVIOUS pengambilan apa punRELATIVE, juga tidak melakukan pembaruan atau penghapusan apa pun yang dilakukan menggunakan sp_cursor antarmuka. Angka apa pun yang tidak menentukan baris dalam buffer pengambilan, menghasilkan posisi yang diatur ke 1, tanpa kesalahan yang dikembalikan. Setelah SETPOSITION dijalankan, posisi tetap berlaku sampai operasi berikutnya sp_cursorfetch , operasi T-SQL FETCH , atau sp_cursor SETPOSITION operasi melalui kursor yang sama. Operasi berikutnya sp_cursorfetch mengatur posisi kursor ke baris pertama dalam buffer pengambilan baru sementara panggilan kursor lainnya tidak memengaruhi nilai posisi. SETPOSITIONdapat ditautkan oleh OR klausul dengan REFRESH, , UPDATEDELETE, atau LOCK 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.

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:

  1. 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.

  2. Gunakan parameter untuk mengirimkan pernyataan atau INSERT lengkap UPDATE atau menggunakan beberapa parameter untuk mengirimkan bagian dari UPDATE pernyataan atau INSERT , 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.