2014-02-26 105 views
0

我在數據庫表中存儲了以下xml。在sql查詢中提取xml元素

我想從xml中提取Productid,我一直不成功。 你能告訴我爲了使查詢工作需要做什麼改變嗎?

XML:

DECLARE @Response VARCHAR(MAX) = '<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<ProductId xsi:type="xsd:long" xmlns="http://nn.service.eservice_v1">30061</ProductId> 
</Response>' 

SQL查詢:

select 
CONVERT(XML,CONVERT(NVARCHAR(max),@Response)).value('(/Response/ProductId)[1]','nvarchar(500)') as ProviderId 

回答

0

要存儲在XML中的XML類型,而不是從varchar轉換。如果你能刪除所有的命名空間的東西,下面的工作。

DECLARE @Response XML = '<Response><ProductId>30061</ProductId></Response>' 

SELECT @Response.value('(//ProductId)[1]','nvarchar(500)') as ProviderId 

如果您不能去掉所有的命名空間的東西,那麼你就需要包含WITH XMLNAMESPACES子句

DECLARE @Response XML = '<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<ProductId xsi:type="xsd:long" xmlns="http://nn.service.eservice_v1">30061</ProductId> 
</Response>' 

;WITH XMLNAMESPACES ('http://nn.service.eservice_v1' as e, 
      'http://www.w3.org/2001/XMLSchema-instance' as xsi) 
SELECT @Response.value('(/Response/e:ProductId)[1]','nvarchar(500)') as ProviderId