共用方式為


建構資料指標的 SQL 陳述式

適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)

SQL Server Native Client ODBC 驅動程式會使用伺服器數據指標來實作 ODBC 規格中定義的數據指標功能。 ODBC 應用程式會使用 SQLSetStmtAttr 來設定不同的語句屬性,以控制數據指標行為。 這些是屬性及其預設值。

屬性 預設
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

當這些選項在執行 SQL 語句時設定為預設值時,SQL Server Native Client ODBC 驅動程式不會使用伺服器數據指標來實作結果集;相反地,它會使用預設結果集。 如果上述任何選項在執行 SQL 語句時從預設值變更,SQL Server Native Client ODBC 驅動程式會嘗試使用伺服器數據指標來實作結果集。

默認結果集支援所有 Transact-SQL 語句。 使用預設結果集時,可以執行的 SQL 語句類型沒有任何限制。

伺服器數據指標不支援所有 Transact-SQL 語句。 伺服器數據指標不支援產生多個結果集的任何 SQL 語句。

伺服器資料指標不支援下列類型的語句:

  • 批次

    從兩個或多個個別 SQL SELECT 語句建置的 SQL 語句,例如:

    SELECT * FROM Authors; SELECT * FROM Titles  
    
  • 具有多個 SELECT 語句的預存程式

    執行預存程式的 SQL 語句,其中包含一個以上的 SELECT 語句。 這包括填滿參數或變數的 SELECT 語句。

  • 關鍵字

    包含 FOR BROWSE 或 INTO 關鍵詞的 SQL 語句。

在 SQL Server 中,如果符合上述任一條件的 SQL 語句是以伺服器數據指標執行,則伺服器數據指標會隱含轉換成預設結果集。 在 SQLExecDirectSQLExecute 傳回SQL_SUCCESS_WITH_INFO之後,數據指標屬性會設定回其預設設定。

不符合上述類別的 SQL 語句可以使用任何語句屬性設定來執行;它們與預設結果集或伺服器數據指標相同。

錯誤

在 SQL Server 7.0 和更新版本中,嘗試執行產生多個結果集的語句會產生SQL_SUCCESS_WITH INFO 和下列訊息:

SqlState: 01S02"  
pfNative: 0  
szErrorMsgString: "[Microsoft][SQL Server Native Client][SQL Server]  
               Cursor type changed."  

接收此訊息的 ODBC 應用程式可以呼叫 SQLGetStmtAttr 來判斷目前的數據指標設定。

使用伺服器數據指標時,嘗試執行具有多個 SELECT 語句的程式會產生下列錯誤:

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.  

使用伺服器資料指標時,嘗試使用多個 SELECT 語句執行批次會產生下列錯誤:

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.  

收到這些錯誤的 ODBC 應用程式必須先將所有資料指標語句屬性重設為預設值,再嘗試執行語句。

另請參閱

執行查詢 (ODBC)