T- SQL VARCHAR (MAX) усечено - проблема не отображается - PullRequest
1 голос
/ 21 февраля 2020

Я пытаюсь отправить данные таблицы в локальный каталог xml файл. Я создал SQL Агентское задание, которое запускает файл сценария sql и отправляет данные в выходной файл с помощью следующей команды:

sqlcmd -d Migration -E -h-1 -W -i "\\phpdxtdavis\F$\Automic\Migration Source - Final\AutomicXML_Extract.sql" -o "F:\Automic\2020 XML Files\Automic_MigrationXML.xml"

AutomicXML_Extract . sql файл содержит несколько операторов select, и я заметил, что когда я открываю выходной файл в Notepad ++, любой столбец, определенный как varchar(max), усекается. Я исправил большинство из них, определив максимальную длину этих столбцов и приведя их к varchar(nnnn), где размер столбца был максимальной длиной. Моя проблема в том, что у меня есть столбец XML, который не будет работать с этим решением. Код, который я использую ниже, урезается до 517 байт.

CREATE TABLE [dbo].[JOBP_MigrationXML](
    [Open_Job_P] [varchar](256) NULL,
    [JOBP] [xml] NULL,
    [SCRIPTS] [nvarchar](max) NULL,
    [DOCU_Link] [varchar](max) NULL,
    [Close_Job] [varchar](8) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

SELECT Open_Job_P, CAST(CONVERT(XML, JOBP) as XML), CAST(SCRIPTS AS varchar(3000)), CAST(DOCU_Link AS varchar(3000)), Close_Job 
    FROM dbo.JOBP_MigrationXML WHERE SprintName = 'Extracts';

Вот так выглядит вывод для столбца JOBP (размер которого может быть от 2 до 605 Кбайт и в настоящее время сокращается до 517 байт):

<JOBP state="1"><JobpStruct mode="design"><task Alias="" BranchType="0" Col="1" Lnr="1" OType="&lt;START&gt;" Object="START" ParentAlias="" ParentObject="" Row="1" Text2=""><checkpoint RollbackFlag="0" RunPerPatch="0" RunPerTarget="0" TcpADays="0" TcpATimee="CALE.CALENDAR_MASTER" id=""/></calendars><postconditions><PostCon><conditions id="CONDITIONS"/></PostCon></postconditions></task><task Alias="" BranchType="0" Col="3" Lnr="7" OType="&lt;END&gt;" Object="END" ParentAlias="" ParentObject="" Row="1" Text2=

Я пробовал все, что касается столбца JOBP, включая convert(varchar(max), JOBP), CAST(convert(varchar(max), JOBP) AS varchar(max)), но он усекается до 257 символов. Все, что я искал, говорит о том, что varchar(max) должен содержать 2 г данных.

Когда я SELECT JOBP FROM dbo.JOBP_MigrationXML, я могу скопировать и вставить все содержимое одного столбца в Notepad ++ без усечения.

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

...