2013-03-12 39 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你的變量。這稱爲有條件的,所以它只在前面的步驟返回非零值時才運行