建構資料指標的 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 語句是以伺服器數據指標執行,則伺服器數據指標會隱含轉換成預設結果集。 在 SQLExecDirect 或 SQLExecute 傳回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 應用程式必須先將所有資料指標語句屬性重設為預設值,再嘗試執行語句。