2013-04-29 46 views
0

请参阅下面的示例代码:更改别名生成的查询

DECLARE @TEST TABLE (
    NAME VARCHAR(100) 
) 

INSERT into @TEST VALUES ('NAME_1') 
INSERT into @TEST VALUES ('NAME_2') 

SELECT NAME AS '@NAME' 
    FROM @TEST 
    FOR XML PATH ('POSITION'), ROOT ('POSITIONS') 

The result is: 

<POSITIONS> 
    <POSITION NAME="NAME_1" /> 
    <POSITION NAME="NAME_2" /> 
</POSITIONS> 

I would like to condition the query to have something like this: 

<POSITIONS> 
    <POSITION NAME_MAIN="NAME_1" /> 
    <POSITION NAME_BACKUP="NAME_2" /> 
</POSITIONS> 

是否可以调节基于查询的值的XML属性?

when NAME IS NAME_1 THEN NAME_MAIN 
when NAME IS NAME_2 THEN NAME_BACKUP? 
+0

应根据病情 – John 2013-04-29 11:32:08

+0

哎呀作为选\ @NAME_MAIN或\ @NAME_BACKUP别名...我没有注意到第二个值。对不起 – TechDo 2013-04-29 11:33:19

回答

2

可能这对你有所帮助 -

DECLARE @TEST TABLE (NAME VARCHAR(100)) 

INSERT INTO @TEST 
VALUES ('NAME_1'), ('NAME_2') 

SELECT 
     '@NAME_MAIN' = NULLIF(NAME, 'NAME_2') 
    , '@NAME_BACKUP' = NULLIF(NAME, 'NAME_1') 
FROM @TEST 
FOR XML PATH ('POSITION'), ROOT ('POSITIONS') 

输出:

<POSITIONS> 
    <POSITION NAME_MAIN="NAME_1" /> 
    <POSITION NAME_BACKUP="NAME_2" /> 
</POSITIONS> 
+0

感谢您的回答,让我找到了正确的解决方案。我忘了null属性不包含在xml中。 – John 2013-04-29 11:55:25

+0

不客气@约翰。 – Devart 2013-04-29 11:57:37