SSIS包中的发送数据库邮件任务失败,其中包含与参数相关的错误

时间:2013-03-12 00:39:55

标签: ssis resultset dbmail

我正在尝试在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作为Datatype = String并且Value为空。我在执行SQL任务编辑器中的参数映射中没有该变量。我有什么遗失的吗?

提前感谢

2 个答案:

答案 0 :(得分:0)

我很确定您无法将参数传递给SSIS中的脚本,但您可以将其传递给存储过程。因此,使用参数将所有内容包装在存储过程中。以下代码创建存储过程。

然后用

调用它
EXEC p_MyProc ? 
包中的

另请注意,我认为您将@SUB设置了两次 - 我将其更改为@BODY

另请注意,将日期存储为varchar(250)通常是个坏主意 - 如果有机会,请立即将其更改为日期或日期时间。

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

答案 1 :(得分:0)

将其移至SSIS(请注意我无法访问SSIS,因此我会盲目飞行)

  1. 在其中创建一个执行SQL任务:
  2. SELECT COUNT(*)作为RCount,'文件失败'+ @@ SERVERNAME As Msg FROM [dbo]。[Table1] WHERE RowCDate> =?

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

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

    3. 时才会运行