0

ファイル名が見つからない場合に電子メールを送信するSSISパッケージでこのSQLタスクを実行しようとしています。このユーザー定義変数「@PackageStartTime」をssisパッケージで宣言しました。しかし、私のSSISパッケージがこのタスクにヒットすると、次のエラーで失敗します。

「クエリDECLARE@PackageStartTimeVarchar(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

理解できません。Datatype = Stringであり、Valueが空白であるため、変数User::strPackageStartTimeを追加しました。Execute SQLTaskEditorのパラメーターマッピングにその変数がありません。何か足りないものはありますか?

少し早いですがお礼を

4

2 に答える 2

0

これを SSIS に移行するには (SSIS にアクセスできないため、盲目的に飛行していることに注意してください)

  1. これを含む SQL 実行タスクを作成します。

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

  1. パラメータを渡し、結果を 2 つの変数にキャプチャします (1 行が返されます)。

  2. 次のステップは、変数を指定して sp_send_dbmail を呼び出す別の SQL タスクの実行です。これは条件付きで呼び出されるため、前のステップがゼロ以外の値を返した場合にのみ実行されます

于 2013-03-12T04:45:45.837 に答える
0

SSIS からそのようなスクリプトにパラメーターを渡すことはできないと確信していますが、ストアド プロシージャに渡すことはできます。そのため、これらすべてをパラメーターを使用してストアド プロシージャにまとめます。次のコードは、ストアド プロシージャを作成します。

次に、それを呼び出します

EXEC p_MyProc ? 

あなたのパッケージに

また、@SUB を 2 回設定したと思われることに注意してください - @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
于 2013-03-12T01:32:41.970 に答える