【问题标题】:Search for a particular column name from with a XML column in SQL Server使用 SQL Server 中的 XML 列搜索特定列名
【发布时间】:2017-07-26 00:56:19
【问题描述】:

只是想在这里获得一些帮助。我有一种情况,我需要从 <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>   

所以基本上从上面提到的代码中,我想从&lt;Columns&gt;/&lt;Column Name&gt; = "findthis" 中获取值,所以基本上findthis 是我的关键字,我想获取包含关键字findthis 的列的所有ID,仅用于参数清酒。

【问题讨论】:

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


    【解决方案1】:

    类似这样的:

    -- 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
    

    【讨论】:

    • 好答案!作为增强功能:搜索字符串 "findthis" 可以通过 sql:variable()sql:column() 引入,如果这在所有情况下都不相同...
    猜你喜欢
    • 1970-01-01
    • 2011-04-15
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2015-01-25
    • 2018-02-12
    相关资源
    最近更新 更多