我想在这里得到一些帮助。我有一种情况需要在<Column Name>
标记内找到一些数据,如下面的XML所示。
我遇到了一个问题,即在系统中导出了一些格式错误的数据,我找到了这个问题,但现在有一个进程,我将数据从系统中导出。现在我有一个包含XML存储的表。
我必须遍历整个表以查看该列名称是否存在于该特定ID列中,如果存在,我将返回该ID。比方说,我的表名是Sample
,列是(ID
,ImportXML
)。
有关如何实现这一目标的任何帮助?从SQL Server中处理XML的新手。
<?xml version="1.0" encoding="UTF-8"?>
<ExportConfiguration id="SampleExport">
<definitions>
<ClientName Value="Sample"/>
<FileType Value="XML"/>
<FileName>
<Value Value="SomeValue"/>
</FileName>
<Columns>
<Column Name="abc" DataType="String" Value="test123"/>
<Column Name="findthis" DataType="String" Value="Test456"/>
</Columns>
</definitions>
</ExportConfiguration>
所以基本上从上面提到的代码中我想从<Columns>/<Column Name> = "findthis"
中获取值,所以基本上findthis
是我的关键字,我希望获得包含列的所有ID的内容关键字findthis
只是为了论证。
答案 0 :(得分:3)
这样的事情:
-- Test table.
declare @xTable table (ID int identity(1,1) primary key clustered, XMLData xml)
-- Insert an XML document. I only did one, but the same would work for multiple
insert into @xTable
select '<?xml version="1.0" encoding="UTF-8"?>
<ExportConfiguration id="SampleExport">
<definitions>
<ClientName Value="Sample"/>
<FileType Value="XML"/>
<FileName>
<Value Value="SomeValue"/>
</FileName>
<Columns>
<Column Name="abc" DataType="String" Value="test123"/>
<Column Name="findthis" DataType="String" Value="Test456"/>
</Columns>
</definitions>
</ExportConfiguration>'
-- Return everything from the table with your XML where there is an attribute at the path "/ExportConfiguration/definitions/Columns/Column" with the name "Name" and the value "findthis"
select *
from @xTable
where XMLData.exist('/ExportConfiguration/definitions/Columns/Column[@Name eq "findthis"]') = 1