2013-03-12 131 views
0

相关的错误我试图执行此SSIS包中的任务发送电子邮件时找不到文件名。我在我的ssis包中声明了这个用户定义的变量“@PackageStartTime”。但是当我的SSIS包执行此任务时,它会失败并显示以下错误。在SSIS包发送数据库邮件任务失败,与参数

“正在执行查询DECLARE @PackageStartTime Varchar(250)SET @Packag ....”失败,出现错误:“参数名称无法识别。” 可能的故障原因:。问题与查询,“结果集”属性设置不正确,参数设置不正确,或连接不正确建立”

DECLARE @PackageStartTime Varchar(250) 
SET @PackageStartTime =? 

IF(SELECT COUNT(*) 
FROM [dbo].[Table1] WHERE RowCDate >[email protected])>0 

BEGIN 

DECLARE @SUB Varchar(250) 
SET @SUB = 'File Failed'[email protected]@SERVERNAME 

DECLARE @BODY Varchar(250) 
SET @BODY = 'File Failed'[email protected]@SERVERNAME 

EXEC msdb.dbo.sp_send_dbmail @profile_name='default', 
@recipients='[email protected]', 
@[email protected], 
@[email protected], 
@query= 'SELECT DISTINCT FileLoadName 
FROM [dbo].[Table1] WHERE RowCDate >[email protected]', 
@attach_query_result_as_file=1 

我无法理解我刚才说的变量用户:: strPackageStartTime为数据类型=字符串和值是空白的。我没有在参数映射该变量在执行SQL任务编辑器。有我失去了一些东西?

预先感谢

回答

0

我相当肯定您无法将参数传递到像SSIS那样的脚本中,但您可以p将它分成一个存储过程。因此,将所有这些都用参数包装在存储过程中。以下代码创建您的存储过程。

然后你在你的包

EXEC p_MyProc ? 

称之为

另外请注意,我认为你设置@SUB两次 - 我把它改为@BODY

同时请注意,它通常是将日期存储为varchar(250)的错误主意 - 如果有机会,则将其更改为日期或日期时间。

CREATE PROC p_MyProc 
@PackageStartTime Varchar(250) 
AS 

IF(SELECT COUNT(*) 
FROM [dbo].[Table1] WHERE RowCDate >[email protected])>0 

BEGIN 

DECLARE @SUB Varchar(250) 
SET @SUB = 'File Failed'[email protected]@SERVERNAME 

DECLARE @BODY Varchar(250) 
SET @BODY = 'File Failed'[email protected]@SERVERNAME 

EXEC sp_send_dbmail @profile_name='default', 
@recipients='[email protected]', 
@[email protected], 
@[email protected], 
@query= 'SELECT DISTINCT FileLoadName 
FROM [dbo].[Table1] WHERE RowCDate >[email protected]', 
@attach_query_result_as_file=1 

GO 
+0

我在我的问题中犯了一些错误。我编辑过。 – ETLUser 2013-03-12 01:45:37

+0

我知道。这回答了你的问题了吗? – 2013-03-12 03:26:36

+0

我无法创建新的存储过程。还有其他解决方案吗? – ETLUser 2013-03-12 03:27:53

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你的变量。这称为有条件的,所以它只在前面的步骤返回非零值时才运行