Membuat Pernyataan SQL untuk Kursor
Berlaku untuk: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)
Driver SQL Server Native Client ODBC menggunakan kursor server untuk mengimplementasikan fungsionalitas kursor yang ditentukan dalam spesifikasi ODBC. Aplikasi ODBC mengontrol perilaku kursor dengan menggunakan SQLSetStmtAttr untuk mengatur atribut pernyataan yang berbeda. Ini adalah atribut dan defaultnya.
Atribut | Default |
---|---|
SQL_ATTR_CONCURRENCY | SQL_CONCUR_READ_ONLY |
SQL_ATTR_CURSOR_TYPE | SQL_CURSOR_FORWARD_ONLY |
SQL_ATTR_CURSOR_SCROLLABLE | SQL_NONSCROLLABLE |
SQL_ATTR_CURSOR_SENSITIVITY | SQL_UNSPECIFIED |
SQL_ATTR_ROW_ARRAY_SIZE | 1 |
Ketika opsi ini diatur ke defaultnya pada saat pernyataan SQL dijalankan, driver SQL Server Native Client ODBC tidak menggunakan kursor server untuk mengimplementasikan tataan hasil; sebagai gantinya, ia menggunakan tataan hasil default. Jika salah satu opsi ini diubah dari defaultnya pada saat pernyataan SQL dijalankan, driver SQL Server Native Client ODBC mencoba menggunakan kursor server untuk mengimplementasikan tataan hasil.
Kumpulan hasil default mendukung semua pernyataan Transact-SQL. Tidak ada batasan pada jenis pernyataan SQL yang dapat dijalankan saat menggunakan tataan hasil default.
Kursor server tidak mendukung semua pernyataan Transact-SQL. Kursor server tidak mendukung pernyataan SQL apa pun yang menghasilkan beberapa tataan hasil.
Jenis pernyataan berikut ini tidak didukung oleh kursor server:
Microsoft Azure Batch
Pernyataan SQL yang dibangun dari dua atau beberapa pernyataan SQL SELECT individual, misalnya:
SELECT * FROM Authors; SELECT * FROM Titles
Prosedur tersimpan dengan beberapa pernyataan SELECT
Pernyataan SQL yang menjalankan prosedur tersimpan yang berisi lebih dari satu pernyataan SELECT. Ini termasuk pernyataan SELECT yang mengisi parameter atau variabel.
Kata Kunci
Pernyataan SQL yang berisi kata kunci UNTUK TELUSURI, atau INTO.
Dalam SQL Server, jika pernyataan SQL yang cocok dengan salah satu kondisi ini dijalankan dengan kursor server, kursor server secara implisit dikonversi ke tataan hasil default. Setelah SQLExecDirect atau SQLExecute mengembalikan SQL_SUCCESS_WITH_INFO, atribut kursor akan diatur kembali ke pengaturan defaultnya.
Pernyataan SQL yang tidak sesuai dengan kategori di atas dapat dijalankan dengan pengaturan atribut pernyataan apa pun; mereka bekerja sama baik dengan tataan hasil default atau kursor server.
Kesalahan
Dalam SQL Server 7.0 dan yang lebih baru, upaya untuk menjalankan pernyataan yang menghasilkan beberapa kumpulan hasil menghasilkan INFO SQL_SUCCESS_WITH dan pesan berikut:
SqlState: 01S02"
pfNative: 0
szErrorMsgString: "[Microsoft][SQL Server Native Client][SQL Server]
Cursor type changed."
Aplikasi ODBC yang menerima pesan ini dapat memanggil SQLGetStmtAttr untuk menentukan pengaturan kursor saat ini.
Upaya untuk menjalankan prosedur dengan beberapa pernyataan SELECT saat menggunakan kursor server menghasilkan kesalahan berikut:
SqlState: 42000
pfNative: 16937
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
A server cursor is not allowed on a stored procedure
with more than one SELECT statement in it. Use a
default result set or client cursor.
Upaya untuk menjalankan batch dengan beberapa pernyataan SELECT saat menggunakan kursor server menghasilkan kesalahan berikut:
SqlState: 42000
pfNative: 16938
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
sp_cursoropen. The statement parameter can only
be a single SELECT statement or a single stored
procedure.
Aplikasi ODBC yang menerima kesalahan ini harus mengatur ulang semua atribut pernyataan kursor ke defaultnya sebelum mencoba menjalankan pernyataan.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk