Вывод переменной таблицы формата с помощью FOR XML AUTO - PullRequest
2 голосов
/ 28 июля 2010

Использование SQL Server 2008.

У меня есть переменная таблицы с одним столбцом и одной строкой.

Если я сделаю это:

Declare @testsToRun Table ( testsId BigInt )
Insert Into @testsToRun
Select testsId From tests Where testsId = 10

Select Top 1 * From @testsToRun
For Xml Auto , Type , Root('testMessage') 

Я получу XMLэто выглядит так:

<testMessage> 
    <_x0040_testsToRun testsId="10" />
</testMessage>

Когда то, что я на самом деле хочу, это:

<testMessage>
    <testsToRun testsId="10" />
</testMessage>

Если источником строки является таблица, это, кажется, работает нормально.Когда это табличная переменная, я получаю метку дочернего элемента, которая мне не нужна, я хочу testsToRun, а не _x0040_testsToRun.

Как я могу переделать свой оператор / предложение FOR XML, чтобы получить правильный вывод?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 28 июля 2010

Попробуйте вместо этого - используйте FOR XML PATH и определите свою структуру вывода с помощью псевдонима (ов) столбца, который вы используете:

SELECT TOP 1
    testsId AS '@testsId'
FROM 
    @testsToRun
FOR XML PATH('testsToRun'), ROOT('testMessage') 

Дает мне:

<testMessage>
  <testsToRun testsId="10" />
</testMessage>
1 голос
/ 28 июля 2010

Попробуйте использовать псевдоним для временной таблицы:

Declare @testsToRun Table ( testsId BigInt )
Insert Into @testsToRun
Select testsId From tests Where testsId = 10

Select Top 1 * From @testsToRun testsToRun
For Xml Auto , Type , Root('testMessage') 
0 голосов
/ 28 июля 2010

Значение x0040 является внутренним именем для временной таблицы. Вы получите нормальный вывод, когда будете выбирать из обычной таблицы (так что .... можно создать временную таблицу, выбрать то, что вы хотите, и удалить ее из БД).

...