2013-04-29 2 views
0

Пожалуйста, смотрите следующий код:Изменить имя псевдонима на основе состояния в XML генерируется запрос

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

должны быть выбраны \ @NAME_MAIN или \ @NAME_BACKUP имя псевдонима на основе состояния – John

+0

упс ... Я не заметил второго значения. Извините – TechDo

ответ

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

Спасибо, ваш ответ привел меня к правильному решению. Я забыл, что нулевые атрибуты не включены в xml. – John

+0

Добро пожаловать @ Джон. – Devart

Смежные вопросы