Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS包中的Send db mail任务失败,并出现与参数相关的错误_Ssis_Resultset_Dbmail - Fatal编程技术网

SSIS包中的Send db mail任务失败,并出现与参数相关的错误

SSIS包中的Send db mail任务失败,并出现与参数相关的错误,ssis,resultset,dbmail,Ssis,Resultset,Dbmail,我试图在SSIS包中执行此sql任务,该包在找不到文件名时发送电子邮件。我已在ssis包中声明了此用户定义变量“@PackageStartTime”。但是,当我的SSIS包执行此任务时,它会失败,并出现以下错误 “执行查询DECLARE@packagestartime Varchar(250)SET@Packag….”失败,错误为::“无法识别参数名。” 可能的失败原因:查询有问题,“ResultSet”属性未正确设置、参数未正确设置或连接未正确建立 我无法理解。我刚刚添加了一个变量User::

我试图在SSIS包中执行此sql任务,该包在找不到文件名时发送电子邮件。我已在ssis包中声明了此用户定义变量“@PackageStartTime”。但是,当我的SSIS包执行此任务时,它会失败,并出现以下错误

“执行查询DECLARE@packagestartime Varchar(250)SET@Packag….”失败,错误为::“无法识别参数名。” 可能的失败原因:查询有问题,“ResultSet”属性未正确设置、参数未正确设置或连接未正确建立

我无法理解。我刚刚添加了一个变量User::strPackageStartTime as Datatype=String,且值为空。我在执行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的权限,所以我是盲目的)

  • 创建包含以下内容的执行SQL任务:
  • 选择COUNT(*)作为RCount,“文件失败”+@@SERVERNAME作为Msg 来自[dbo]。[Table1],其中RowCDate>=

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

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


  • 我知道。这回答了你的问题吗?我不能创建新的存储过程。还有其他解决方案吗?你可以将所有逻辑移到SSIS中,因为我不能在这里创建存储过程。我应该怎么做?很抱歉,我是SSIS新手。请参阅我的其他答案中关于如何在SSIS中创建此逻辑的指南
    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