Выбрать столбцы смешанного типа, включая все значения из столбца XML? - PullRequest
0 голосов
/ 21 января 2020

У меня есть таблица со смешанными типами столбцов (int, varchar, & xml). Столбцы varchar содержат данные в формате XML, а столбец xml имеет большой узел данных. Я пытаюсь выбрать все столбцы varchar с включенным XML, чтобы создать выходной файл XML, используя шаг задания агента SQL. У меня проблема в том, что столбец, определенный как XML, заполняет много пробелов в файле и усекает данные в этом столбце. Таблица выглядит следующим образом:

CREATE TABLE [dbo].[MixedTYPEXML](
    [col1] [varchar](4) NOT NULL,
    [col2] [int] NOT NULL,
    [xmlinText1] [varchar](190) NOT NULL,
    [JOBP] [xml] NULL
) 
GO

INSERT INTO [dbo].[MixedTypeXML]
           ([col1]
           ,[col2]
           ,[xmlinText1]
           ,[JOBP]
           )
     VALUES
           ('Prod'
           ,'35490'
           ,'<JOBP AllowExternal="1" name="JOBP.EXTRACTS_PHP_SSIS_POST_CORE#35490">'
           ,'<PreCon><conditions id="CONDITIONS" /></PreCon>'
)
GO

Мой оператор выбора -

SELECT col2, xmlinText1, JOBP from dbo.MixedTypeXML

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

35490 <JOBP AllowExternal="1" name="JOBP.EXTRACTS_PHP_SSIS_POST_CORE#35490"> <PreCon><conditions id="CONDITIONS" /></PreCon>

Это только часть столбцов, которые я пытаюсь извлечь. Мне в основном нужно извлечь все столбцы в таблице, включая определенный столбец XML, чтобы отправить результаты в выходную таблицу на локальном диске без пробелов и усечения данных. Выходной файл будет иметь формат XML. Пример данных столбца JOBP - это просто фрагмент. Фактические данные содержат несколько сотен строк xml узлов.

Я посмотрел множество постов о том, как извлечь узлы и значения, но я не пытаюсь извлечь определенные c данные. Я хочу, чтобы вся таблица создала XML выходной файл. Есть идеи, как это сделать?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Ни один из приведенных выше ответов не работал для меня. Наконец-то я приступил к работе с использованием функции CONVERT string.

SELECT col1, col2 , CONVERT(VARCHAR(MAX), JOBP) FROM @tbl

0 голосов
/ 22 января 2020

Исходя из желаемого вывода, весь выходной файл должен быть в формате XML. Это не может быть частично * .csv файл, смешанный с XML элементами.

SQL

-- DDL and sample data population, start
DECLARE @tbl TABLE (
    [col1] VARCHAR(4) NOT NULL,
    [col2] INT NOT NULL,
    [xmlinText] VARCHAR(190) NOT NULL,
    [JOBP] XML NULL
);

INSERT INTO @tbl ([col1] ,[col2] ,[xmlinText] ,[JOBP])
VALUES
(
    'Prod'
    ,35490
    ,'<JOBP AllowExternal="1" name="JOBP.EXTRACTS_PHP_SSIS_POST_CORE#35490"/>'
    ,'<PreCon><conditions id="CONDITIONS" /></PreCon>'
)
-- DDL and sample data population, end

SELECT col1, col2
    , TRY_CAST([xmlinText] AS XML) AS [xmlinText]
    , JOBP
FROM @tbl
FOR XML PATH('row'), TYPE, ROOT('root');

Вывод

<root>
  <row>
    <col1>Prod</col1>
    <col2>35490</col2>
    <xmlinText>
      <JOBP AllowExternal="1" name="JOBP.EXTRACTS_PHP_SSIS_POST_CORE#35490" />
    </xmlinText>
    <JOBP>
      <PreCon>
        <conditions id="CONDITIONS" />
      </PreCon>
    </JOBP>
  </row>
</root>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...