適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric 中的 SQL 資料庫
您可以針對 xml 資料類型變數或資料行指定 xml 資料類型方法。 例如,query() Method (xml Data Type) 會針對 XML 執行個體,執行指定的 XQuery。 當您以這種方式來建構 XML 時,可能會想要引用非 XML 類型資料行或 Transact-SQL 變數中的值。 此程序就稱為:在 XML 資料中繫結關聯式資料。
為了在 XML 中繫結非 XML 的關聯式資料,SQL Server Database Engine 提供了下列虛擬函數:
sql:column() Function (XQuery) 可讓您在 XQuery 或 XML DML 運算式中,使用關聯資料行的值。
sql:variable() Function (XQuery)。 可讓您在 XQuery 或 XML DML 運算式中使用 SQL 變數的值。
每當您想要公開 XML 內的關聯值時,就可以搭配 xml 資料類型方法使用這些函數。
您不能使用這些函數來參考 xml、CLR 使用者定義型別、datetime、smalldatetime、text、ntext、sql_variant 和 image 類型之資料行或變數中的資料。
此外,這種繫結方式是唯讀的。 意即,您不能在使用這些函數的資料行中寫入資料。 例如,不允許下列語法: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() 的用法類似,且提供更多的好處。 因為有以成本為考量的查詢最佳化工具,在資料行上使用索引會更有效率。 此外,計算資料行可能會儲存已升級的屬性。