Bagikan melalui


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

Menjalankan Kueri (ODBC)