【问题标题】:Send db mail task fails in SSIS Package with errors related to the parameter在 SSIS 包中发送 db 邮件任务失败,并出现与参数相关的错误
【发布时间】:2013-03-12 00:39:55
【问题描述】:

我正在尝试在 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 任务编辑器的参数映射中没有该变量。我有什么遗漏吗?

提前致谢

【问题讨论】:

    标签: ssis resultset dbmail


    【解决方案1】:

    我很确定您不能将参数传递到像 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
    

    【讨论】:

    • 我知道。这能回答你的问题吗?
    • 我无法创建新的存储过程。还有其他解决办法吗?
    • 您可以将所有逻辑移入 SSIS
    • 因为这里无法创建存储过程。我该怎么做?很抱歉我是 SSIS 的新手。
    • 在我的其他答案中查看我的指南,了解如何在 SSIS 中创建此逻辑
    【解决方案2】:

    要将其移至 SSIS(请注意,我无权访问 SSIS,所以我是盲目的)

    1. 在其中创建一个执行 SQL 任务:

    SELECT COUNT(*) As RCount, 'File Failed' + @@SERVERNAME As Msg FROM [dbo].[Table1] WHERE RowCDate >= ?

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

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

    【讨论】:

      猜你喜欢
      • 2018-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多