T-SQL VARCHAR(MAX) Truncated — проблема не в отображении

Я пытаюсь отправить данные таблицы в файл 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, которая вызывает это? Я в тупике.


person VLo88    schedule 21.02.2020    source источник
comment
Я не говорю о переносе результатов в XML, но я бы поискал пороги или ограничения этой функции. Кроме того, попробуйте NVARCHAR(MAX) и посмотрите изменения. Какую версию SQL Server вы используете? - вывод заканчивается на Text2= - какие данные в этом поле? добавьте псевдоним к вашему выбору. - изменить всю эту информацию в вашем вопросе.   -  person Marco Aurelio Fernandez Reyes    schedule 21.02.2020
comment
Вы добавили параметр -w column_width в командную строку sqlcmd?   -  person pmbAustin    schedule 21.02.2020
comment
@MarcoAurelioFernandezReyes NVARCHAR(MAX) усекает данные до 237 байт. Я пробовал оба способа. Я не понимаю, что дает добавление псевдонима к моему оператору select. Я использую только одну таблицу. Text2= является частью данных в столбце JOBP, который усекается.   -  person VLo88    schedule 24.02.2020
comment
Это похоже на проблему/решение, подобное вашему: stackoverflow.com/questions/5916896/. Вот документация по упомянутым командам sqlcmd: docs.microsoft.com/en-us/sql/tools/.   -  person EnterTheCode    schedule 25.02.2020