我正在尝试在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任务编辑器中的参数映射中没有该变量。我有什么遗失的吗?
提前感谢
答案 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,因此我会盲目飞行)
SELECT COUNT(*)作为RCount,'文件失败'+ @@ SERVERNAME As Msg FROM [dbo]。[Table1] WHERE RowCDate> =?
传入您的参数,并将结果捕获到两个变量中(返回单行)
您的下一步是另一个执行SQL任务,使用您的变量调用sp_send_dbmail。这是有条件调用的,因此只有在前一步返回非零值