0

我有一张临时表。该表的列数和列名可以不同。因为该临时表是从另一个查询生成的。意味着它可以是 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。

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

名称='abc' 和 ID='3' 和地址='100/8 NY'

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

4

2 回答 2

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_executesqlwith 参数而不是构建 SQL 字符串。

于 2012-11-19T16:09:54.510 回答
0

试试这个; 这是工作的小提琴

你的变量:

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'
于 2012-11-19T16:27:45.463 回答