top
Loading...
SQL2005XML最佳實施策略之跨域查詢

當您的數據同時駐留在關系列和 XML 數據類型列中時,您可能希望編寫將關系數據處理和 XML 數據處理結合起來的查詢。例如,您可以使用 FOR XML 將關系列和 XML 列中的數據轉換為 XML 數據類型實例,然后使用 XQuery 對其進行查詢。相反,可以從 XML 值生成行集(請參閱用法),并使用 T-SQL 對其進行查詢。

編寫跨域查詢的更為方便和有效的方法是在 XQuery 或 XML DML 表達式內使用 SQL 變量或列的值:

• 可以在 XQuery 或 XML DML 表達式中,通過 sql:variable() 來使用 SQL 變量的值。

• 可以在 XQuery 或 XML DML 表達式中,通過 sql:column() 來使用關系列中的值。

• 該方法使應用程序可以將查詢參數化,如下面的示例所示。然而,不允許在 sql:variable() 和 sql:column() 中使用 XML 和用戶定義的類型。

示例:使用 sql:variable() 的跨域查詢

下面的查詢是對示例:基于 XML 數據類型方法的計算列上的查詢中顯示的查詢進行修改后得到的版本。在該版本中,使用 SQL 變量 @isbn 傳入感興趣的 ISBN。通過將常量替換為 sql:variable(),可以使用該查詢來搜索任意 ISBN,而不僅是其 ISBN 為 0-7356-1588-2 的那個。

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

可以用類似的方式使用 Sql:column(),并且提供附加的好處。可以使用列上的索引來提高效率,這要由基于成本的查詢優化器決定。而且,計算列可以存儲提升的屬性,如基于 XML 數據類型的計算列中所述。

(T114)

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗