在 XML 資料中繫結關聯式資料

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

您可以針對 xml 資料類型變數或資料行指定 xml 資料類型方法。 例如,query() Method (xml Data Type) 會針對 XML 執行個體,執行指定的 XQuery。 當您以這種方式來建構 XML 時,可能會想要引用非 XML 類型資料行或 Transact-SQL 變數中的值。 此程序就稱為:在 XML 資料中繫結關聯式資料。

為了在 XML 中繫結非 XML 的關聯式資料,SQL Server Database Engine 提供了下列虛擬函數:

每當您想要公開 XML 內的關聯值時,就可以搭配 xml 資料類型方法使用這些函數。

您不能使用這些函數來參考 xml、CLR 使用者定義型別、datetime、smalldatetime、textntextsql_variantimage 類型之資料行或變數中的資料。

此外,這種繫結方式是唯讀的。 意即,您不能在使用這些函數的資料行中寫入資料。 例如,不允許下列語法:sql:variable("@x")="某個運算式"

範例:Cross-domain Query Using sql:variable()

此範例會示範 sql:variable() 如何讓應用程式將查詢參數化。 ISBN 的傳入方式是使用 SQL 變數 @isbn。 將常數置換成 sql:variable() 之後,就可以使用該查詢來搜尋任何 ISBN,而不只是 ISBN 為 0-7356-1588-2 的 ISBN。

DECLARE @isbn VARCHAR(20)  
SET     @isbn = '0-7356-1588-2'  
SELECT  xCol  
FROM    T  
WHERE   xCol.exist ('/book/@ISBN[. = sql:variable("@isbn")]') = 1  

sql:column() 的用法類似,且提供更多的好處。 因為有以成本為考量的查詢最佳化工具,在資料行上使用索引會更有效率。 此外,計算資料行可能會儲存已升級的屬性。

另請參閱