使用SQL Server中的XML列搜索特定列名称

时间:2017-07-26 00:56:20

标签: sql sql-server xml sql-server-2012

我想在这里得到一些帮助。我有一种情况需要在<Column Name>标记内找到一些数据,如下面的XML所示。

我遇到了一个问题,即在系统中导出了一些格式错误的数据,我找到了这个问题,但现在有一个进程,我将数据从系统中导出。现在我有一个包含XML存储的表。

我必须遍历整个表以查看该列名称是否存在于该特定ID列中,如果存在,我将返回该ID。比方说,我的表名是Sample,列是(IDImportXML)。

有关如何实现这一目标的任何帮助?从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只是为了论证。

1 个答案:

答案 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
相关问题