SQL-获取XML标记名称和值

时间:2012-11-19 15:49:38

标签: sql sql-server

我有一个临时表。此表的列数和列名可以有所不同。因为此临时表是从另一个查询生成的。意思是它可以是3-15。我使用以下命令从临时表中获取XML:

DECLARE @XML XML 
SET @XML= (SELECT * FROM ##temp FOR XML PATH(''))

示例输出:<Name>abc</Name><ID>3</ID><Address>100/8 NY</Address>

现在我希望标签名称及其对应的值成为@variable,比如@StoreData。

select @StoreDate将打印以下预期输出 预期产出:

姓名='abc'且ID ='3'且地址='100/8 NY'

我是怎么做到的。提前致谢。 注意:我使用的是MS SQL 2005版

2 个答案:

答案 0 :(得分:3)

这符合您的要求......

;with cte as
(
    select 
        xr.value('fn:local-name(.)','varchar(50)') name, 
        xr.value('.','varchar(20)') val
    from @xml.nodes('//.') xq(xr)
    where xr.value('fn:local-name(.)','varchar(50)')<>''
)
    select STUFF(
        (select ' and ' + name + '='''+val+'''' from cte for xml path('')),1,4,'')

但是,如果您正在尝试构建一个sql过滤器字符串,我建议使用带有参数的sp_executesql而不是构建SQL字符串。

答案 1 :(得分:0)

试试这个;这是工作Fiddle

您的变量:

DECLARE @XX XML = '<Name>abc</Name><ID>3</ID><Address>100/8 NY</Address>'

<强>查询:

SELECT 'Name = ''' + x.value('Name[1]','VARCHAR(100)') + ''' and ' +
       'ID = ''' + x.value('ID[1]','VARCHAR(100)') + ''' and ' + 
       'Address = ''' + x.value('Address[1]','VARCHAR(100)') + ''''
FROM @XX.nodes('/') MyXml(x)

<强>输出:

Name = 'abc' and ID = '3' and Address = '100/8 NY'