Bagikan melalui


Membuat Pernyataan SQL untuk Kursor

Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Driver ODBC SQL Server Native Client menggunakan kursor server untuk menerapkan fungsi 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 ODBC Klien Asli SQL Server tidak menggunakan kursor server untuk mengimplementasikan tataan hasil; sebaliknya, ia menggunakan tataan hasil default. Jika salah satu opsi ini diubah dari defaultnya pada saat pernyataan SQL dijalankan, driver ODBC SQL Server Native Client 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 pernyataan SQL SELECT individual atau lebih, 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.

Di 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 dengan baik dengan tataan hasil default atau kursor server.

Kesalahan

Di 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 default mereka sebelum mencoba menjalankan pernyataan.

Lihat Juga

Mengeksekusi Kueri (ODBC)