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"
的所有记录。但我尝试的查询返回空值。
任何人都可以帮我这么做吗?
由于
答案 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"?> ...
)。