建構資料指標的 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 陳述式。
關鍵字
包含 COMPUTE、COMPUTE BY、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.
如果使用伺服器資料指標時嘗試執行包含 COMPUTE 子句的 SELECT 陳述式,就會產生下列錯誤:
SqlState: 42000
pfNative: 16907
szErrorMsgString: [Microsoft][SQL Server Native Client][SQL Server]
'COMPUTE' is not allowed in cursor statements.
收到這些錯誤的 ODBC 應用程式必須將所有資料指標陳述式屬性重設為其預設值,然後再嘗試執行此陳述式。