0

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

预先感谢

4

2 回答 2

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
于 2013-03-12T01:32:41.970 回答
0

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

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

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

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

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

于 2013-03-12T04:45:45.837 回答