2014-03-06 23 views
0

XML:可能使用參數來匹配SQLServer中的XMLNamespace?

<ZZZ:PRODUCT xmlns:ZZZ="123"><ZZZ:CONTENT>Blank</ZZZ:CONTENT>/ZZZ:PRODUCT> 

ZZZ將根據實體改變。在SQL中如何傳遞參數並僅返回匹配的參數?以下是我所擁有的,並希望將@Entity參數添加到。

SQL:

@Entity varchar(10) 

SELECT * FROM Products 

WHERE Products.productDetailXML.exist('//ZZZ:PRODUCT') = 1 
+0

您使用的是什麼具體數據庫?他們都說「SQL」作爲他們的查詢語言 - 但像XML支持這樣的東西在供應商和供應商之間差別很大。因此,請使用您正在使用的具體數據庫更新您的代碼 - 無論是MySQL,Postgres,Sybase,IBM DB2,Oracle,SQL Server,Interbase,還是您正在使用的任何其他應用程序! –

+0

SQL Server。它已更新。謝謝 –

+0

在XPath中,你也可以選擇忽略這樣的命名空間:'// * [local-name()=「PRODUCT」]',如果你不關心命名空間,你可以使用它。 – helderdarocha

回答

0

不知道我理解你想要的這裏,但我將無論如何提供一個答案。

您不必關心名稱空間前綴不同的情況。這是查詢時重要的名稱空間。您的查詢不起作用,因爲您尚未指定前綴ZZZ所屬的名稱空間。

此查詢將爲您提供使用命名空間123的所有行。

WITH XMLNAMESPACES('123' as ns) 
SELECT * 
FROM Products 
WHERE Products.productDetailXML.exist('//ns:PRODUCT') = 1 

如果前綴ZZZ

<ZZZ:PRODUCT xmlns:ZZZ="123"> 
    <ZZZ:CONTENT>Blank</ZZZ:CONTENT> 
</ZZZ:PRODUCT> 

或別的東西完全一樣A沒關係。

<A:PRODUCT xmlns:A="123"> 
    <A:CONTENT>Blank</A:CONTENT> 
</A:PRODUCT> 

,你仍然會得到使用該命名空間123行。

SQL Fiddle

+0

我相信你是對的。我需要將動態部分移至123而不是ZZZ,因爲這不起作用。 –

相關問題