Я создаю 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)?