共用方式為


SQLDescribeParam

在已備妥的 ODBC 陳述式控制代碼上呼叫 SQLDescribeParam 時,SQL Server Native Client ODBC 驅動程式會建置並執行 Transact-SQL SELECT 陳述式,以描述任何 SQL 陳述式的參數。 結果集的中繼資料則會決定已備妥之陳述式中的參數特性。因此,SQLDescribeParam 可能會傳回 SQLExecuteSQLExecDirect 所可能傳回的任何錯誤碼。

從 SQL Server 2012 開始,Database Engine 的改進功能就允許 SQLDescribeParam 針對預期的結果取得更精確的描述。 這些更精確的結果可能會與舊版 SQL Server 中 SQLDescribeParam 所傳回的值不同。 如需詳細資訊,請參閱<中繼資料探索>。

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 子句中包含參數或與 SUM 函數的結果相比較的任何 ODBC 或 Transact-SQL 陳述式。

  • 針對相依於包含參數之子查詢的任何 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);

當連接到 master 以外的任何資料庫時,在成功的準備之後執行 SQLDescribeParam 會傳回空白的資料列集。 不論目前的使用者資料庫為何,依下列方式所準備的相同呼叫都會導致 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 日期/時間的改善 (ODBC)>。

大型 CLR UDT 的 SQLDescribeParam 支援

SQLDescribeParam 支援大型 CLR 使用者定義型別 (UDT)。 如需詳細資訊,請參閱<大型 CLR 使用者定義型別 (ODBC)>。

請參閱

概念

ODBC API 實作詳細資料

其他資源

SQLDescribeParam 函數