MS SQL распечатать сообщение для XML - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь проверить свои данные плохо, если таблица существует, и получить вывод на печать из моего оператора как XML

Для этого я попробовал следующий код:

IF (
    EXISTS (
        SELECT *
        FROM INFORMATION_SCHEMA.TABLES
            WHERE TABLE_SCHEMA = 'dbo'
            AND TABLE_NAME = 'TABLE_NAME_I'
    )
) BEGIN
    PRINT 'Table allready exists in database'
    FOR XML AUTO
END;

Но единственное, что я получил:

Database operation failed: Incorrect syntax near the FOR keyword.

Я также пытался установить FOR XML AUTO перед PRINT 'Table allready exists in database', но результат такой же.

Я использую JDB C Коннектор для реализации соединения и вывода.

Возможен ли вообще мой проект или мне нужно объединить его с чем-то еще, чтобы достичь этого?

Заранее спасибо за помощь .

ОБНОВЛЕНИЕ


Я также пробовал сейчас
SET @string = '<MESSAGE>Table allready exists in database</MESSAGE>';
SET @xml = CONVERT(XML, @string);
SELECT @xml;

Вот мой результат, который я получил:

<Data>
   <object_II>
      <_1/>
   </object_II>
<Data>

Ожидаемый результат:

<Data>
   <object_II>
      <MESSAGE>Table allready exists in database</MESSAGE>
   </object_II>
<Data>

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вам понадобится SELECT, а не PRINT:

SELECT 'Table already exists' as Message
FOR XML PATH('object_II'), ROOT ('Data');
1 голос
/ 18 июня 2020

Вы можете попробовать выражения XQuery и FLWOR, чтобы составить желаемый XML.

SQL

DECLARE @message VARCHAR(100) = 'Table allready exists in database';

SELECT CAST(N'' AS XML).query('
<Data>
   <object_II>
      <MESSAGE>{sql:variable("@message")}</MESSAGE>
   </object_II>
</Data>
');

Или полностью динамически c XML состав:

SELECT CAST(N'' AS XML).query('
    element  Data {
        element  object_II {
            element  MESSAGE {
                text {sql:variable("@message")}
            }
        }
    }
');
...