共用方式為


建構資料指標的 SQL 陳述式

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 陳述式的預存程序

    執行包含多個 SELECT 陳述式之預存程序的 SQL 陳述式。 這包括填入參數或變數的 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)