#sql-server
#sql-сервер
Вопрос:
У меня есть следующий запрос в sql server
select a.*,b.first_loss_calc_result as "@firstLoss"
from tablea a
inner join tableb fl on b.id = a.ID
FOR XML AUTO, ROOT('Response')
Ответ, который я получаю обратно, имеет следующий формат .
<Response>
<a column1="test" column 2="testh" ">
<b firstLoss="1.890600000000000e 001" />
</a>
</Response>
Но я искал формат ответа, упомянутый ниже :
<Response>
<a column1="test" column 2="testh" firstLoss= "1.890600000000000e 001"></a>
</Response>
В принципе, я хочу, чтобы весь столбец из таблицы a и один столбец из таблицы B были атрибутом элемента
Может кто-нибудь сообщить мне, как я могу это сделать. Спасибо за помощь!
Ответ №1:
Тестовые данные
DECLARE @TABLE1 TABLE (ID INT, column1 VARCHAR(100), Column2 VARCHAR(100))
INSERT INTO @TABLE1 VALUES
(1, 'Col1 Value1', 'Col2 Value1'),
(2, 'Col1 Value2', 'Col2 Value2')
DECLARE @TABLE2 TABLE (ID INT, FirstLoss INT)
INSERT INTO @TABLE2 VALUES
(1, 1000),(2,2000)
Запрос
select A.column1 AS [@Column1]
,A.Column2 AS [@Column2]
,B.FirstLoss AS [@firstLoss]
from @TABLE1 a
inner join @TABLE2 B on b.id = a.ID
FOR XML PATH('a'), ROOT('Response')
Результат
<Response>
<a Column1="Col1 Value1" Column2="Col2 Value1" firstLoss="1000" />
<a Column1="Col1 Value2" Column2="Col2 Value2" firstLoss="2000" />
</Response>
Комментарии:
1. есть ли способ получить a.* в первой таблице в этом запросе, поскольку столбцы в таблице a составляют около 10-20 и продолжают меняться
2. Я подумал, что это
AS [@Name]
было странным, но оказалось, что это необходимо (или, по крайней мере, имеет эффект) sqlfiddle.com /#!6/d41d8/20004 против sqlfiddle.com /#!6/d41d8/200053. Если вы хотите, чтобы значения из столбцов отображались как значения атрибутов в XML, вам нужно будет использовать имена столбцов вместе с псевдонимом, начинающимся с
@
это по синтаксису, обойти это невозможно.