Memproses Pernyataan Pembaruan dan Penghapusan yang Diposisikan

Penting

Fitur ini akan dihapus dalam versi Windows mendatang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini. Microsoft merekomendasikan penggunaan fungsionalitas kursor driver.

Pustaka kursor mendukung pernyataan pembaruan dan penghapusan yang diposisikan dengan mengganti klausa WHERE CURRENT OF dalam pernyataan tersebut dengan klausa WHERE yang menghitung nilai yang disimpan dalam cache-nya untuk setiap kolom terikat. Pustaka kursor meneruskan pernyataan UPDATE dan DELETE yang baru dibuat ke driver untuk dieksekusi. Untuk pernyataan pembaruan yang diposisikan, pustaka kursor kemudian memperbarui cache-nya dari nilai dalam buffer set baris dan mengatur nilai yang sesuai dalam array status baris ke SQL_ROW_UPDATED. Untuk pernyataan penghapusan yang diposisikan, ini mengatur nilai terkait dalam array status baris ke SQL_ROW_DELETED.

Perhatian

Klausa WHERE yang dibangun oleh pustaka kursor untuk mengidentifikasi baris saat ini dapat gagal mengidentifikasi baris apa pun, mengidentifikasi baris yang berbeda, atau mengidentifikasi lebih dari satu baris. Untuk informasi selengkapnya, lihat Membuat Pernyataan yang Dicari, nanti di lampiran ini.

Pernyataan pembaruan dan penghapusan yang diposisikan tunduk pada batasan berikut:

  • Pernyataan pembaruan dan penghapusan yang diposisikan hanya dapat digunakan dalam kasus berikut: ketika pernyataan SELECT menghasilkan tataan hasil; ketika pernyataan SELECT tidak berisi gabungan, klausa UNION , atau klausa GROUP BY ; dan ketika kolom apa pun yang menggunakan alias atau ekspresi dalam daftar pemilihan tidak terikat dengan SQLBindCol.

  • Jika aplikasi menyiapkan pernyataan pembaruan atau penghapusan yang diposisikan, aplikasi harus melakukannya setelah disebut SQLFetch atau SQLFetchScroll. Meskipun pustaka kursor mengirimkan pernyataan ke driver untuk persiapan, pustaka tersebut menutup pernyataan dan menjalankannya secara langsung ketika aplikasi memanggil SQLExecute.

  • Jika driver hanya mendukung satu pernyataan aktif, pustaka kursor mengambil sisa tataan hasil lalu mengambil kembali kumpulan baris saat ini dari cache-nya sebelum menjalankan pernyataan pembaruan atau penghapusan yang diposisikan. Jika aplikasi kemudian memanggil fungsi yang mengembalikan metadata dalam kumpulan hasil (misalnya, SQLNumResultCols atau SQLDescribeCol), pustaka kursor mengembalikan kesalahan.

  • Jika pernyataan pembaruan atau penghapusan yang diposisikan dilakukan pada kolom tabel yang menyertakan kolom tanda waktu yang diperbarui secara otomatis setiap kali pembaruan dilakukan, semua pernyataan pembaruan atau penghapusan yang diposisikan berikutnya akan gagal jika kolom tanda waktu terikat. Ini terjadi karena pernyataan pembaruan atau penghapusan yang dicari yang dibuat pustaka kursor tidak akan secara akurat mengidentifikasi baris yang akan diperbarui. Nilai dalam pernyataan yang dicari untuk kolom tanda waktu tidak akan cocok dengan nilai kolom tanda waktu yang diperbarui secara otomatis.