Ошибка отправки почты в пакете служб SSIS с ошибками, связанными с параметром

Я пытаюсь выполнить эту задачу sql в пакете служб SSIS, которые отправляют электронное письмо, когда имя файла не найдено. Я объявил эту пользовательскую переменную "@PackageStartTime" в моем пакете ssis. Но когда мой пакет служб SSIS выполняет эту задачу, он завершается с ошибкой.

"Выполнение запроса DECLARE @PackageStartTime Varchar(250) SET @Packag...." завершилось с ошибкой.: "Имя параметра не распознано". Возможные причины сбоя: проблема с запросом, свойство ResultSet установлено неправильно, параметры установлены неправильно или соединение установлено неправильно.

DECLARE @PackageStartTime Varchar(250)
SET @PackageStartTime =?

IF(SELECT COUNT(*)
FROM [dbo].[Table1] WHERE RowCDate >=@PackageStartTime)>0

BEGIN

DECLARE @SUB Varchar(250)
SET @SUB = 'File Failed'+@@SERVERNAME

DECLARE @BODY Varchar(250)
SET @BODY = 'File Failed'+@@SERVERNAME

EXEC msdb.dbo.sp_send_dbmail @profile_name='default',
@recipients='dev@null.com',
@subject=@SUB,
@body=@BODY,
@query= 'SELECT DISTINCT FileLoadName
FROM [dbo].[Table1] WHERE RowCDate >=@PackageStartTime',
@attach_query_result_as_file=1

Я не могу понять. Я только что добавил переменную User::strPackageStartTime, так как Datatype = String и Value пусто. У меня нет этой переменной в отображении параметров в редакторе задач "Выполнение SQL". Там я что-то упустил?

Заранее спасибо

2 ответа

Чтобы переместить это в SSIS (обратите внимание, у меня нет доступа к SSIS, поэтому я летаю вслепую)

  1. Создайте задачу SQL для выполнения с этим в нем:

ВЫБЕРИТЕ COUNT(*) В качестве RCount, 'File Failed' + @@SERVERNAME As Msg FROM [dbo].[Table1] WHERE RowCDate >=?

  1. Передайте свой параметр и запишите результат в две переменные (возвращается одна строка)

  2. Ваш следующий шаг - это еще одно выполнение SQL-задачи, вызывающее sp_send_dbmail с вашими переменными. Это вызывается условно, поэтому выполняется только в том случае, если предыдущий шаг вернул ненулевое значение

Я совершенно уверен, что вы не можете передать параметр в скрипт, подобный этому, из SSIS, но вы можете передать его в хранимую процедуру. Так что оберните все это в хранимую процедуру с параметром. Следующий код создает вашу хранимую процедуру.

Тогда вы называете это с

EXEC p_MyProc ? 

в вашей упаковке

Также обратите внимание, я думаю, что вы установили @SUB дважды - я изменил его на @BODY

Также обратите внимание, что обычно плохая идея хранить даты как varchar(250) - измените их на date или datetime сейчас, если у вас есть такая возможность.

CREATE PROC p_MyProc
@PackageStartTime Varchar(250)
AS

IF(SELECT COUNT(*)
FROM [dbo].[Table1] WHERE RowCDate >=@PackageStartTime)>0

BEGIN

DECLARE @SUB Varchar(250)
SET @SUB = 'File Failed'+@@SERVERNAME

DECLARE @BODY Varchar(250)
SET @BODY = 'File Failed'+@@SERVERNAME

EXEC sp_send_dbmail @profile_name='default',
@recipients='dev@null.com',
@subject=@SUB,
@body=@BODY,
@query= 'SELECT DISTINCT FileLoadName
FROM [dbo].[Table1] WHERE RowCDate >=@PackageStartTime',
@attach_query_result_as_file=1

GO
Другие вопросы по тегам