Ошибка отправки почты в пакете служб 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, поэтому я летаю вслепую)
- Создайте задачу SQL для выполнения с этим в нем:
ВЫБЕРИТЕ COUNT(*) В качестве RCount, 'File Failed' + @@SERVERNAME As Msg FROM [dbo].[Table1] WHERE RowCDate >=?
Передайте свой параметр и запишите результат в две переменные (возвращается одна строка)
Ваш следующий шаг - это еще одно выполнение 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