SQLSetStmtAttr
SQL Server Native Client ODBC 驅動程式不支援混合式 (索引鍵集/動態) 資料指標模型。 如果設定的值不等於 0,使用 SQL_ATTR_KEYSET_SIZE 設定索引鍵值大小的嘗試將會失敗。
應用程式會在所有陳述式上設定 SQL_ATTR_ROW_ARRAY_SIZE 來宣告呼叫 SQLFetch 或 SQLFetchScroll 函數時所傳回之資料列的數目。 在表示伺服器資料指標的陳述式上,驅動程式會使用 SQL_ATTR_ROW_ARRAY_SIZE 決定伺服器所產生之資料列區塊的大小以滿足來自資料指標的提取要求。 在動態資料指標的區塊大小內,如果交易隔離等級足以確保可重複讀取已認可的交易,資料列成員資格與排序是固定的。 在此值指出的區塊之外,資料指標是完全動態的。 伺服器資料指標區塊大小是完全動態的,而且可以在提取處理的任何點變更。
SQLSetStmtAttr 和資料表值參數
SQLSetStmtAttr 可用於設定應用程式參數描述項 (APD) 中的 SQL_SOPT_SS_PARAM_FOCUS,然後再存取資料表值參數資料行的描述項欄位。
如果嘗試將 SQL_SOPT_SS_PARAM_FOCUS 設定為不是資料表值參數之參數的序數,SQLSetStmtAttr 會傳回 SQL_ERROR,並建立包含 SQLSTATE = HY024,以及「屬性值無效」訊息的診斷記錄。 當傳回 SQL_ERROR 時,SQL_SOPT_SS_PARAM_FOCUS 不會變更。
將 SQL_SOPT_SS_PARAM_FOCUS 設定為 0 會還原參數之描述項記錄的存取權。
SQLSetStmtAttr 也可用於設定 SQL_SOPT_SS_NAME_SCOPE。 如需詳細資訊,請參閱本主題稍後的「SQL_SOPT_SS_NAME_SCOPE」一節。
如需詳細資訊,請參閱<已備妥之陳述式的資料表值參數中繼資料>。
如需有關資料表值參數的詳細資訊,請參閱<資料表值參數 (ODBC)>。
疏鬆資料行的 SQLSetStmtAttr 支援
SQLSetStmtAttr 可用於設定 SQL_SOPT_SS_NAME_SCOPE。 如需詳細資訊,請參閱本主題稍後的「SQL_SOPT_SS_NAME_SCOPE」一節。如需有關疏鬆資料行的詳細資訊,請參閱<疏鬆資料行支援 (ODBC)>。
陳述式屬性
SQL Server Native Client ODBC 驅動程式也支援下列驅動程式專屬的陳述式屬性。
SQL_SOPT_SS_CURSOR_OPTIONS
SQL_SOPT_SS_CURSOR 屬性會指定驅動程式是否會在資料指標上使用驅動程式專屬的效能選項。 設定這些選項時,不允許使用 SQLGetData。 預設值為 SQL_CO_OFF。 ValuePtr 值的類型是 SQLLEN。
ValuePtr 值 |
說明 |
---|---|
SQL_CO_OFF |
預設值。 停用快速順向、唯讀資料指標與自動擷取,在順向、唯讀資料指標上啟用 SQLGetData。 當 SQL_SOPT_SS_CURSOR_OPTIONS 設定為 SQL_CO_OFF 時,資料指標類型將不會變更。 也就是說,快速順向資料指標仍是快速順向資料指標。 若要變更資料指標類型,應用程式現在必須使用 SQLSetStmtAttr/SQL_ATTR_CURSOR_TYPE 來設定不同的資料指標類型。 |
SQL_CO_FFO |
啟用快速順向、唯讀資料指標,在順向、唯讀資料指標上停用 SQLGetData。 |
SQL_CO_AF |
在任何資料指標類型上啟用自動擷取選項。 針對陳述式控制代碼啟用此選項時,SQLExecute 或 SQLExecDirect 將會產生隱含的 SQLFetchScroll (SQL_FIRST)。 資料指標會開啟,而且第一個批次的資料列會在伺服器的單一往返中傳回。 |
SQL_CO_FFO_AF |
使用自動擷取選項啟用快速順向資料指標。 這在同時指定 SQL_CO_AF 和 SQL_CO_FFO 時相同。 |
設定這些選項時,如果伺服器偵測到已經提取最後一個資料列,則會自動關閉資料指標。 應用程式仍然必須呼叫 SQLFreeStmt (SQL_CLOSE) 或 SQLCloseCursor,但是驅動程式不必將關閉通知傳送到伺服器。
如果選取清單包含 text、ntext 或 image 資料行,就會將快速順向資料指標轉換為動態料指標,並允許使用 SQLGetData。
SQL_SOPT_SS_DEFER_PREPARE
SQL_SOPT_SS_DEFER_PREPARE 屬性會決定要立即準備陳述式還是延遲陳述式,直到執行 SQLExecute、SQLDescribeCol 或 SQLDescribeParam 為止。 在 SQL Server 7.0 和先前版本中,會忽略此屬性 (沒有延遲準備)。 ValuePtr 值的類型是 SQLLEN。
ValuePtr 值 |
說明 |
---|---|
SQL_DP_ON |
預設。 呼叫 SQLPrepare 函數後,陳述式準備會延遲,直到呼叫 SQLExecute,或執行中繼屬性作業 (SQLDescribeCol 或 SQLDescribeParam) 為止。 |
SQL_DP_OFF |
只要執行 SQLPrepare 之後,就準備陳述式。 |
SQL_SOPT_SS_REGIONALIZE
SQL_SOPT_SS_REGIONALIZE 屬性用於決定陳述式層級的資料轉換。 將日期、時間和貨幣值轉換為字元字串時,此屬性會使驅動程式遵從用戶端的地區設定。 此轉換僅能從 SQL Server 原生資料類型轉換成字元字串。
ValuePtr 值的類型是 SQLLEN。
ValuePtr 值 |
說明 |
---|---|
SQL_RE_OFF |
預設值。 此驅動程式不會使用用戶端地區設定,將日期、時間和貨幣資料轉換成字元字串資料。 |
SQL_RE_ON |
將日期、時間和貨幣資料轉換成字元字串資料時,此驅動程式會使用用戶端地區設定。 |
地區轉換設定適用於貨幣、數值、日期和時間資料類型。 此轉換設定只有在貨幣、數值、日期或時間值轉換為字元字串時,才會套用到輸出轉換。
[!附註]
當 SQL_SOPT_SS_REGIONALIZE 陳述式選項開啟時,驅動程式會針對目前的使用者使用地區設定的登錄設定。 如果應用程式透過呼叫 SetThreadLocale 來設定目前執行緒的地區設定,驅動程式就不會接受它。
變更資料來源的地區行為可能會導致應用程式失敗。 剖析日期字串並預期日期字串如 ODBC 定義之方式顯示的應用程式,可能會受到變更此值的負面影響。
SQL_SOPT_SS_TEXTPTR_LOGGING
SQL_SOPT_SS_TEXTPTR_LOGGING 屬性會在包含 text 或 image 資料的資料行上,切換作業的記錄。 ValuePtr 值的類型是 SQLLEN。
ValuePtr 值 |
說明 |
---|---|
SQL_TL_OFF |
停用在 text 和 image 資料上所執行之作業的記錄。 |
SQL_TL_ON |
預設值。 啟用在 text 和 image 資料上所執行之作業的記錄。 |
SQL_SOPT_SS_HIDDEN_COLUMNS
SQL_SOPT_SS_HIDDEN_COLUMNS 屬性會在結果集中公開 SQL Server SELECT FOR BROWSE 陳述式內隱藏的資料行。 此驅動程式預設不會公開這些資料行。ValuePtr 值的類型是 SQLLEN。
ValuePtr 值 |
說明 |
---|---|
SQL_HC_OFF |
預設值。 FOR BROWSE 資料行會從結果集隱藏起來。 |
SQL_HC_ON |
公開 FOR BROWSE 資料行。 |
SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT
SQL_SOPT_SS_QUERYNOTIFICATION_MSGTEXT 屬性會傳回查詢通知要求的訊息文字。
SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS
SQL_SOPT_SS_QUERYNOTIFICATION_OPTIONS 屬性會指定用於查詢通知要求的選項。 這些是使用 name=value 語法在字串中指定,如下所示。 應用程式會負責建立此服務以及在佇列外部讀取通知。
查詢通知選項字串的語法為:
service=<service-name>[;(local database=<database>|broker instance=<broker instance>)]
例如:
service=mySSBService;local database=mydb
SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT
SQL_SOPT_SS_QUERYNOTIFICATION_TIMEOUT 屬性會指定查詢通知維持作用中的秒數。 預設值是 432000 秒 (5 天)。 ValuePtr 值的類型是 SQLLEN。
SQL_SOPT_SS_PARAM_FOCUS
SQL_SOPT_SS_PARAM_FOCUS 屬性會指定後續 SQLBindParameter、SQLGetDescField、SQLSetDescField、SQLGetDescRec 和 SQLSetDescRec 呼叫的焦點。
SQL_SOPT_SS_PARAM_FOCUS 的類型是 SQLULEN。
預設值為 0,表示這些呼叫處理的參數會對應到 SQL 陳述式中的參數標記。 設定為資料表值參數的參數號碼時,這些呼叫會處理該資料表值參數的資料行。 設定為非資料表值參數之參數號碼的值時,這些呼叫會傳回錯誤 IM020:「參數焦點沒有參考資料表值參數」。
SQL_SOPT_SS_NAME_SCOPE
SQL_SOPT_SS_NAME_SCOPE 屬性會指定後續目錄函數呼叫的名稱範圍。 SQLColumns 所傳回的結果集取決於 SQL_SOPT_SS_NAME_SCOPE 的設定。
SQL_SOPT_SS_NAME_SCOPE 的類型是 SQLULEN。
ValuePtr 值 |
說明 |
---|---|
SQL_SS_NAME_SCOPE_TABLE |
預設值。 使用資料表值參數時,指出應該傳回實際資料表的中繼資料。 使用疏鬆資料行功能時,SQLColumns 只會傳回非疏鬆 column_set 成員的資料行。 |
SQL_SS_NAME_SCOPE_TABLE_TYPE |
表示應用程式需要資料表類型 (而非實際資料表) 的中繼資料 (目錄函數應該傳回資料表類型的中繼資料)。 接著,應用程式會將資料表值參數的 TYPE_NAME 傳遞為 TableName 參數。 |
SQL_SS_NAME_SCOPE_EXTENDED |
使用疏鬆資料行功能時,不管 column_set 成員資格為何,SQLColumns 都會傳回所有資料行。 |
SQL_SS_NAME_SCOPE_SPARSE_COLUMN_SET |
使用疏鬆資料行功能時,SQLColumns 只會傳回疏鬆 column_set 成員的資料行。 |
SQL_SS_NAME_SCOPE_DEFAULT |
等於 SQL_SS_NAME_SCOPE_TABLE。 |
SS_TYPE_CATALOG_NAME 和 SS_TYPE_SCHEMA_NAME 會分別搭配 CatalogName 和 SchemaName 參數使用,以識別資料表值參數的目錄和結構描述。 當應用程式完成擷取資料表值參數的中繼資料時,必須將 SQL_SOPT_SS_NAME_SCOPE 社回 SQL_SS_NAME_SCOPE_TABLE 的預設值。
當 SQL_SOPT_SS_NAME_SCOPE 設定為 SQL_SS_NAME_SCOPE_TABLE 時,連結伺服器的查詢會失敗。 利用包含伺服器元件的目錄對 SQLColumns 或 SQLPrimaryKeys 進行呼叫將會失敗。
如果嘗試將 SQL_SOPT_SS_NAME_SCOPE 設定為無效值,會傳回 SQL_ERROR,並產生包含 SQLSTATE HY024 與「屬性值無效」訊息的診斷記錄。
如果在 SQL_SOPT_SS_NAME_SCOPE 包含非 SQL_SS_NAME_SCOPE_TABLE 的值時呼叫目錄函數而非 SQLTables、SQLColumns 或 SQLPrimaryKeys,則會傳回 SQL_ERROR。 此時會產生包含 SQLSTATE HY010 與「函數順序錯誤 (SQL_SOPT_SS_NAME_SCOPE 未設定為 SQL_SS_NAME_SCOPE_TABLE)」訊息的診斷記錄。