在 XML 資料中繫結關聯式資料
適用於:SQL Server Azure SQL 資料庫 Azure 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() 的用法類似,且提供更多的好處。 因為有以成本為考量的查詢最佳化工具,在資料行上使用索引會更有效率。 此外,計算資料行可能會儲存已升級的屬性。