SSIS包发送db邮件任务失败,参数相关错误



我试图在SSIS包中执行此sql任务,当找不到文件名时发送电子邮件。我已经在我的ssis包中声明了这个用户定义变量"@PackageStartTime"。但是当我的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作为数据类型=字符串和值为空白。我没有在执行SQL任务编辑器的参数映射变量。我是不是漏掉了什么?

提前致谢

我非常确定您不能从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

将其移动到SSIS(请注意,我无法访问SSIS,因此我是盲目的)

  1. 创建一个执行SQL任务,其中包含:

SELECT COUNT(*)作为RCount, 'File Failed' + @@SERVERNAME作为Msg从[dbo]。[Table1] WHERE RowCDate>= ?

  1. 传入参数,并将结果捕获为两个变量,(返回单行)

  2. 下一步是另一个执行SQL任务,用变量调用sp_send_dbmail。这是有条件调用的,所以它只在前一步返回非零值

  3. 时运行。

最新更新