2012-11-19 107 views
0

我有一個臨時表。 此表的列數和列名稱可能有所不同。因爲此臨時表是從另一個查詢生成的。意味着它可以是3-15。我從使用以下命令臨時表得到XML:SQL-獲取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

回答

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字符串。

+0

非常感謝兄弟。這正是我想要的 – riad

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'