Я пытаюсь отправить данные таблицы в локальный каталог 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="<START>" 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="<END>" 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 параметр, вызывающий это? Я в конце концов на этом.