Результат SQL в XML (определенный макет) - PullRequest
0 голосов
/ 19 июня 2019

У меня есть таблица в SQL, которая содержит список настроек для приложения на serverID

Я хочу написать оператор SQL, который создаст определенную компоновку XML.

Базовый оператор SQL для извлечения этих данных:

SELECT SettingName, SettingValue 
FROM dbo.ServerSettings  
WHERE ServerID = @ServerID

Мне просто нужно знать правильные параметры FOR XML.

Я хочу получить результат, подобный следующему. В основном, используя значение поля SettingName в качестве имени узла.

<ROOT>
    <COSTRECOVERYSYSTEM_CONNECTION_STRING></COSTRECOVERYSYSTEM_CONNECTION_STRING>
    <COSTRECOVERYSYSTEM_EXTRACT_INTERVAL>60</COSTRECOVERYSYSTEM_EXTRACT_INTERVAL>
    <COSTRECOVERYSYSTEM_FILE_DATESTAMP>yyyyMMdd</COSTRECOVERYSYSTEM_FILE_DATESTAMP>
    <COSTRECOVERYSYSTEM_FILE_EXTENSION>txt</COSTRECOVERYSYSTEM_FILE_EXTENSION>
    <COSTRECOVERYSYSTEM_FILE_NAME>txt</COSTRECOVERYSYSTEM_FILE_NAME>
    <COSTRECOVERYSYSTEM_FILE_PATH>txt</COSTRECOVERYSYSTEM_FILE_PATH>
</ROOT>

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

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

Но вы можете сделать что-то подобное:

DECLARE @tbl TABLE(SettingName VARCHAR(100),SettingValue VARCHAR(100));
INSERT INTO @tbl VALUES ('Setting1','1'),('Setting2','2'),('ForbiddenValue','Huh! What about & and <?');

SELECT CAST((
        SELECT '<' + UPPER(t.SettingName) + '>' +
               --this embedded FOR XML will implicitly do the escaping for you
               (SELECT t.SettingValue AS [*] FOR XML PATH('')) +
               '</' + UPPER(t.SettingName) + '>'
        FROM @tbl t
        FOR XML PATH(''),TYPE
       ).value('.','nvarchar(max)') AS XML)
FOR XML PATH('ROOT');

В общем, я бы никогда не создал XML со строковыми методами.Есть так много возможных отступлений и ловушек.Но в этом случае это может быть лучший выбор.

Подсказка: убедитесь, что имена параметров являются допустимыми именами элементов XML.Существует несколько правил именования элементов XML

0 голосов
/ 19 июня 2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...