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

Berlaku untuk: SQL Server (SQL Server 2008 (10.0.x) melalui versi saat ini).

Konvensi sintaks transact-SQL

Sintaks

  
sp_cursor  cursor, optype, rownum, table  
    [ , value[...n]]]  

Argumen

Kursor
Handel kursor. kursor adalah parameter yang diperlukan yang memanggil nilai input int . kursor adalah nilai handel yang dihasilkan oleh SQL Server dan dikembalikan oleh prosedur sp_cursoropen.

optype
Adalah parameter yang diperlukan yang menunjuk operasi apa yang akan dilakukan kursor. optype memerlukan salah satu nilai input int 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 pernyataan SQL INSERT .
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 PEMBARUAN.
0X10 LOCK Menyebabkan U-Lock SQL Server diperoleh pada halaman yang berisi baris yang ditentukan. Kunci ini kompatibel dengan S-Locks tetapi tidak dengan X-Locks atau U-Lock lainnya. Dapat digunakan untuk menerapkan penguncian jangka pendek.
0X20 SETPOSISI Digunakan hanya ketika program akan mengeluarkan pernyataan DELETE atau UPDATE yang diposisikan SQL Server berikutnya.
0X40 MUTLAK Hanya dapat digunakan bersama dengan UPDATE atau DELETE. ABSOLUTE hanya digunakan dengan kursor KEYSET (diabaikan untuk kursor DYNAMIC dan kursor STATIK tidak dapat diperbarui0.

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 akan dioperasikan kursor, pembaruan, atau penghapusan.

Catatan

Ini tidak memengaruhi titik awal operasi PENGAMBILAN RELATIVE, NEXT, atau PREVIOUS, atau pembaruan atau penghapusan apa pun yang dilakukan menggunakan sp_cursor.

rownum adalah parameter yang diperlukan yang memanggil nilai input int .

1
Menandakan baris pertama dalam buffer pengambilan.

2
Menandakan baris kedua dalam buffer pengambilan.

3, 4, 5
Menandakan baris ketiga, dan sebagainya.

n
Menandakan baris ke-n dalam buffer pengambilan.

0
Menandakan semua baris dalam buffer pengambilan.

Catatan

Hanya valid untuk digunakan dengan nilai UPDATE, DELETE, REFRESH, atau LOCK optype .

tabel
Nama tabel yang mengidentifikasi tabel yang diterapkan optype ketika definisi kursor melibatkan nama kolom gabungan atau ambigu dikembalikan oleh parameter nilai . Jika tidak ada tabel tertentu yang ditunjuk, defaultnya adalah tabel pertama dalam klausa FROM. tabel adalah parameter opsional yang memerlukan nilai input String. String dapat ditentukan sebagai karakter apa pun atau jenis data UNICODE. tabel bisa menjadi nama tabel multi-bagian.

value
Digunakan untuk menyisipkan atau memperbarui nilai. Parameter string nilai hanya digunakan dengan nilai optype UPDATE dan INSERT. String dapat ditentukan sebagai karakter apa pun atau jenis data UNICODE.

Catatan

Nama parameter untuk nilai dapat ditetapkan oleh pengguna.

Mengembalikan Nilai Kode

Saat menggunakan RPC, operasi DELETE atau UPDATE yang diposisikan dengan buffer nomor 0 akan mengembalikan pesan DONE dengan rowcount 0 (kegagalan) atau 1 (berhasil) untuk setiap baris dalam buffer pengambilan.

Keterangan

Parameter optype

Dengan pengecualian kombinasi SETPOSITION dengan UPDATE, DELETE, REFRESH, atau LOCK; atau ABSOLUTE dengan UPDATE atau DELETE, nilai optype saling eksklusif.

Klausul SET dari nilai UPDATE dibuat dari parameter nilai .

Salah satu manfaat menggunakan nilai optype INSERT 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, INSERT gagal.

  • Nilai SETPOSITION tidak memengaruhi titik awal operasi PENGAMBILAN RELATIVE, NEXT, atau PREVIOUS, atau tidak melakukan pembaruan atau penghapusan apa pun yang dilakukan menggunakan antarmuka sp_cursor. Angka apa pun yang tidak menentukan baris dalam buffer pengambilan akan mengakibatkan posisi diatur ke 1 tanpa kesalahan yang dikembalikan. Setelah SETPOSITION dijalankan, posisi tetap berlaku hingga operasi sp_cursorfetch berikutnya, operasi T-SQL FETCH , atau operasi SETPOSITION sp_cursor melalui kursor yang sama. Operasi sp_cursorfetch berikutnya akan mengatur posisi kursor ke baris pertama dalam buffer pengambilan baru sementara panggilan kursor lainnya tidak akan memengaruhi nilai posisi. SETPOSITION dapat ditautkan oleh klausa OR dengan REFRESH, UPDATE, DELETE, atau LOCK untuk mengatur nilai posisi ke baris terakhir yang dimodifikasi.

Jika baris dalam buffer pengambilan tidak ditentukan melalui parameter rownum , posisi akan diatur ke 1, tanpa kesalahan yang dikembalikan. Setelah posisi diatur, posisi tetap berlaku sampai operasi sp_cursorfetch berikutnya, operasi T-SQL FETCH, atau operasi SETPOSITION sp_cursor dilakukan pada kursor yang sama.

SETPOSITION ditautkan oleh klausa OR 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 kursor SCROLL_LOCKS, Anda harus mempertahankan kunci secara independen pada baris yang diberikan (ini dapat dilakukan melalui transaksi). Untuk kursor OPTIMIS, 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 dapat dimodifikasi. Nama kolom parameter nilai harus mencerminkan nama kolom dalam tampilan, tetapi nama tabel bisa berupa tabel dasar yang mendasar (dalam hal ini sp_cursor akan 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 telah ditunda sebelumnya ke nama kolom di 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 UPDATE atau INSERT lengkap atau gunakan beberapa parameter untuk mengirimkan bagian dari pernyataan UPDATE atau INSERT yang kemudian akan dibangun SQL Server ke dalam pernyataan lengkap. Contoh ini dapat ditemukan di bagian Contoh nanti dalam topik ini.

Contoh

Nilai alternatif Yang Digunakan Parameter

Untuk PEMBARUAN:

Saat parameter tunggal digunakan, pernyataan UPDATE dapat dikirimkan menggunakan sintaks berikut:

[ [ UPDATE <table name> ] SET ] {<column name> = expression} [,...n]

Catatan

Jika nama tabel UPDATE <ditentukan, nilai apa pun yang ditentukan untuk parameter tabel akan diabaikan.>

Saat beberapa parameter digunakan, parameter pertama harus berupa string dalam formulir berikut:

[ SET ] <column name> = expression [,...n]

dan parameter berikutnya harus dalam bentuk:

<column name> = expression [,...n]

Dalam hal ini, <nama tabel dalam pernyataan pembaruan yang dibangun adalah nama> yang ditentukan atau default oleh parameter tabel .

Untuk INSERT:

Saat parameter tunggal digunakan, pernyataan INSERT dapat dikirimkan menggunakan sintaks berikut:

[ [ INSERT [INTO] <table name> ] VALUES ] ( <expression> [,...n] )

Catatan

Jika nama> tabel INSERT< ditentukan, nilai apa pun yang ditentukan untuk parameter tabel akan diabaikan.

Saat beberapa parameter digunakan, parameter pertama harus berupa string dalam formulir berikut:

[ VALUES ( ] <expression> [,...n]

dan parameter berikutnya harus dalam bentuk:

expression [,...n]

kecuali di mana NILAI ditentukan, dalam hal ini harus ada berikutnya ")" setelah ekspresi terakhir. Dalam hal ini, <nama> tabel dalam pernyataan UPDATE yang dibangun adalah nama yang ditentukan atau default oleh parameter tabel .

Catatan

Dimungkinkan untuk mengirimkan satu parameter sebagai parameter bernama, yaitu "@VALUES". Dalam hal ini tidak ada parameter bernama lain yang dapat digunakan.

Lihat Juga

sp_cursoropen (T-SQL)
sp_cursorfetch (T-SQL)
Prosedur Tersimpan Sistem (Transact-SQL)