如何从XML文件中检索SQL Server中的数据

时间:2015-03-05 17:32:03

标签: sql sql-server sql-server-2008

XML文件

<?xml version="1.0" encoding="utf-8"?>
<Data>
  <ProductID>
    <Producer value="SomeName" />
    <Locality value="California" />
    <Chamber value="ATK-01B" />
    <System value="CAL-ATK-01B-01" />
  </ProductID>     
</Data>

以上是XML文件保存在SQL Server表的content列中。我使用以下查询从DB中选择值为CAL-ATK-01B-01的记录。

查询:

SELECT * 
FROM [Table name] 
WHERE [xmlBody].value('(/Data/ProductID/System)[1]', 'varchar(max)') LIKE 'CAL-ATK-01B-01';  

我需要在xml文件中选择匹配值为"CAL-ATK-01B-01"的所有记录。但我尝试的查询返回空值。

任何人都可以帮我这么做吗?

由于

2 个答案:

答案 0 :(得分:1)

您需要在此处使用此查询来实际选择XML 属性的值 value

SELECT * 
FROM [Table Name]
WHERE [xmlBody].value('(/Data/ProductID/System/@value)[1]', 'varchar(100)') LIKE 'CAL-ATK-01B-01';  

答案 1 :(得分:1)

如果您需要精确的马赫,那么您可以使用exist方法:

SELECT  ...
FROM    dbo.MyTable x
WHERE   x.xmlBody.exist('Data/ProductID/System[@value eq "CAL-ATK-01B-01"]') = 1

如果你需要部分马赫,那么你可以使用exists方法并包含函数(XQuery):

SELECT  *
FROM    @MyTable x
WHERE   x.XmlCol.exist('Data/ProductID/System[contains(@value,"ATK")]') = 1

注意:SQL Server无法存储UTF-8编码的字符串(<?xml version="1.0" encoding="utf-8"?> ...)。