SQLDescribeParam
為了描述任何 SQL 語句的參數,SQL Server Native Client ODBC 驅動程式會在備妥的 ODBC 語句控制碼上呼叫 SQLDescribeParam 時,建置並執行 Transact-SQL SELECT 語句。 結果集的中繼資料則會決定已備妥之陳述式中的參數特性。 SQLDescribeParam 可以傳回 SQLExecute 或 SQLExecDirect 可能會傳回的任何錯誤碼。
從 SQL Server 2012 開始,資料庫引擎的改善可讓 SQLDescribeParam 取得更精確的預期結果描述。 這些更精確的結果可能與舊版 sqlDescribeParam 所傳回的值不同SQL Server。 如需詳細資訊,請參閱中繼資料探索。
此外,SQL Server 2012 的新功能,ParameterSizePtr現在會傳回值,這個值會與對應參數標記的資料行或運算式定義對齊,如ODBC 規格中所定義。 在舊版的 SQL Server Native Client 中,ParameterSizePtr可以是 型別的對應值 SQL_DESC_OCTET_LENGTH
,或是提供給 SQLBindParameter 類型的不相關資料行大小值, SQL_INTEGER
例如 (忽略的值,例如) 。
在下列情況下,驅動程式不支援呼叫 SQLDescribeParam:
針對包含 FROM 子句的任何 Transact-SQL UPDATE 或 DELETE 子句,在 SQLExecDirect 之後。
對於任何包含 HAVING 子句中參數的 ODBC 或 Transact-SQL 語句,或與 SUM 函數的結果進行比較。
針對任何 ODBC 或 Transact-SQL 語句,視包含參數的子查詢而定。
針對在比較 (like) 或定量述詞的運算式中都包含參數標記的 ODBC SQL 陳述式。
針對其中一個參數為函數參數的任何查詢。
當 Transact-SQL 命令中有批註 (/* */) 時。
處理 Transact-SQL 語句批次時,驅動程式也不支援在批次中的第一個語句之後,針對 語句中的參數標記呼叫 SQLDescribeParam。
描述備妥預存程式的參數時,SQLDescribeParam 會使用系統預存程式 sp_sproc_columns 來擷取參數特性。 sp_sproc_columns可以報告目前使用者資料庫中預存程式的資料。 準備完整預存程式名稱可讓 SQLDescribeParam 跨資料庫執行。 例如,系統預存程式 sp_who 可以在任何資料庫中準備和執行,如下所示:
SQLPrepare(hstmt, "{call sp_who(?)}", SQL_NTS);
成功準備之後執行 SQLDescribeParam 會在連線到任何資料庫 master
但 時傳回空的資料列集。 備妥的相同呼叫如下所示,不論目前的使用者資料庫為何,SQLDescribeParam 都會成功:
SQLPrepare(hstmt, "{call master..sp_who(?)}", SQL_NTS);
針對大型實值資料類型, DataTypePtr 中傳回的值會SQL_VARCHAR、SQL_VARBINARY或SQL_NVARCHAR。 為了指出大型實值資料類型參數的大小為「無限制」,SQL Server Native Client ODBC 驅動程式會將ParameterSizePtr設定為 0。 實際大小值則會以標準 varchar
參數傳回。
注意
如果參數已與 SQL_VARCHAR、SQL_VARBINARY 或 SQL_WVARCHAR 參數的最大大小繫結,則會傳回參數的繫結大小,而不是「無限制」。
若要繫結「無限制」大小輸入參數,則必須使用資料執行中 (data-at-execution)。 您無法系結「無限制」大小的輸出參數, (沒有任何方法可從輸出參數串流資料,例如 SQLGetData 對於結果集) 。
對輸出參數而言,必須繫結緩衝區,而且如果值過大,則緩衝區會填滿,並且傳回 SQL_SUCCESS_WITH_INFO 訊息及「字串資料;右側截斷」警告。 之後會捨棄截斷的資料。
SQLDescribeParam 和資料表值參數
應用程式可以使用 SQLDescribeParam 擷取備妥語句的資料表值參數資訊。 如需詳細資訊,請參閱 備妥語句的資料表值參數中繼資料。
如需一般資料表值參數的詳細資訊,請參閱 ODBC) (資料表值參數 。
SQLDescribeParam 對增強日期和時間功能的支援
針對日期/時間類型所傳回的值如下:
DataTypePtr | ParameterSizePtr | DecimalDigitsPtr | |
---|---|---|---|
Datetime | SQL_TYPE_TIMESTAMP | 23 | 3 |
smalldatetime | SQL_TYPE_TIMESTAMP | 16 | 0 |
date | SQL_TYPE_DATE | 10 | 0 |
time | SQL_SS_TIME2 | 8, 10..16 | 0..7 |
datetime2 | SQL_TYPE_TIMESTAMP | 19, 21..27 | 0..7 |
datetimeoffset | SQL_SS_TIMESTAMPOFFSET | 26, 28..34 | 0..7 |
如需詳細資訊,請參閱 ODBC) (日期和時間改善 。
大型 CLR UDT 的 SQLDescribeParam 支援
SQLDescribeParam
支援大型 CLR 使用者定義型別 (UDT)。 如需詳細資訊,請參閱 ODBC) (大型 CLR User-Defined 類型 。