T SQL с SSIS CHAR (13) и CHAR (10) вопрос: CHAR (13), кажется, отсутствует - PullRequest
0 голосов
/ 24 марта 2020

Я создаю SQL работу с динамическим c запросом, что-то вроде:

DECLARE @command nvarchar(max);

--Real command is a bit longer :)
SET @command = N'SELECT
    [A] = N''' + DB_NAME() + '''
    ,[B] = N''' + @@SERVERNAME + ''';';

--EXEC [msdb].dbo.sp_add_job command
--EXEC [msdb].dbo.sp_add_jobstep
--    stuff
--    ,@subsystem = N'TSQL'
--    ,@command = @command

Это прекрасно работает. когда я запускаю этот запрос из SSMS, я получаю хороший форматированный шаг при просмотре свойств SQL jobstep:

SELECT
    [A] = N'Foo'
    ,[B] = N'Bar';

Однако, когда я вставляю динамический запрос c в T SQL задача в SSIS и выполнить задачу в SSIS я получаю один уродливый лайнер:

SELECT [A] = N'Foo', [B] = N'Bar';

Когда я смотрю на запрос в [msdb] .dbo. [sysjobsteps] кажется, что CHAR (13) отсутствуют в запросе SQL.

SELECT
    [LF] = CHARINDEX(CHAR(10), [command], 1)
    ,[CR] = CHARINDEX(CHAR(13), [command], 1)
FROM [msdb].dbo.[sysjobsteps]
WHERE [subsystem] = N'TSQL'
AND [job_id] = <myjob>;

/*
LF CR
-- --
7  0

Expecting:
LF CR
-- --
8  7
*/

Если я затем обновлю строку команды в [msdb] .dbo. [sysjobsteps], то форматирование снова в порядке в свойствах задания шага:

UPDATE a
SET [command] = REPLACE([command], CHAR(10), CHAR(13) + CHAR(10))
FROM [msdb].dbo.[sysjobsteps] a
WHERE [subsystem] = N'TSQL'
AND [job_id] = <myjob>;

Итак, я знаю, что свойства рабочего шага ожидают CR и LF и не любят LF.

Где-то по пути задача Execute SQL удаляет CHAR (13), любые идеи по как я могу заставить SSIS не удалять CHAR (13)?

1 Ответ

0 голосов
/ 25 марта 2020

Найдя способ исправить это, я добавил это:

IF CHARINDEX(CHAR(13), @command, 1) = 0
    SET @Command = REPLACE(@Command, CHAR(10), CHAR(13) + CHAR(10));

Это исправляет отсутствующий CHAR (13) при запуске из пакета служб SSIS.

...