2016-09-23 36 views
0

SSISパッケージにパラメータを渡すためのストアドプロシージャを作成しようとしています。XP_CMDSHELL SSISパッケージを実行するにはパラメータ

DECLARE @Path VARCHAR(200), 
@ExcelPath VARCHAR(50), 
@DB VARCHAR(100), 
@ExcelSheet VARCHAR(500), 
@Cmd VARCHAR(4000), 
@ReturnCode INT, 
@Msg VARCHAR(1000), 
@SQLServer varchar(255), 
@EmailAddress varchar(255), 
@DTEXEC varchar(255) 


SELECT @Path = 'C:\SpyderNetwork Production\SSIS\IMPORTSC\' 
SELECT @ExcelPath = 'C:\Users\Administrator\Desktop\SR\test.xlsx' 
SELECT @ExcelSheet = 'DATA$' 
select @DTEXEC = 'C:\"Program Files (x86)"\"Microsoft SQL Server"\120\DTS\Binn\dtexec.exe' 



exec xp_cmdshell '' 

SELECT @Cmd = @DTEXEC + ' /FILE "' + @Path + 'package.dtsx" /MAXCONCURRENT 1 /CHECKPOINTING OFF /REPORTING EW' 
+ ' /SET \Package.Variables[User::ExcelPath].Properties[Value];' + @ExcelPath 
+ ' /SET \Package.Variables[User::ExcelSheet].Properties[Value];' + @ExcelSheet 


EXEC @ReturnCode = xp_cmdshell @Cmd 

私はパラメータをその値に置き換え、コマンドプロンプト内で実行しましたが、すべて機能しましたが、ここで実装すると、次のエラーが表示されます。繰り返しますが、コマンドプロンプトで実行できるときに実行する権限がなく、問題がないと言っても意味がありません。私はここに何か基本的なものを欠いています

Microsoft(R)SQL Server実行パッケージユーティリティ バージョン12.0.2430.0(32ビット用) Copyright(C)Microsoft Corporation。全著作権所有。 NULL 開始:11時29分04秒AM エラー:2016年9月23日11:29:04.92 コード:0xC0016016 ソース:パッケージ 説明:保護されたXMLノード "DTS:パスワードを" 復号化に失敗しましたエラー0x8009000Bで」指定された状態で使用するキーが無効です。 "あなたはこの情報にアクセスする権限を与えられていないかもしれません。このエラーは、暗号化エラーが発生した場合に発生します。 正しいキーが使用可能であることを確認します。 終了エラー エラー:2016年9月23日11:29:04.92 コード:0xC0016016 ソース:パッケージ 説明:指定された状態で使用するためにエラー0x8009000B「キーを無効に:保護されたXMLノード「パスワードをDTS」を解読するのに失敗しました。 "。あなたはこの情報にアクセスする権限を与えられていないかもしれません。このエラーは、暗号化エラーが発生した場合に発生します。 正しいキーが使用可能であることを確認します。 終了エラー エラー:2016年9月23日11:29:05.03 コード:0xC0202009 ソース:パッケージの接続マネージャ "TEST.SpyderDB.TESTUSER" 説明:SSISエラーコードDTS_E_OLEDBERROR。 OLE DBエラーが発生しました。エラーコード:0x80040E4D。 OLE DBレコードが利用可能です。ソース: "Microsoft SQL Serverネイティブクライアント11.0" Hresult:0x80040E4D説明: "ユーザー 'TESTUSER'のログインに失敗しました。" 終了エラー エラー:2016年9月23日11:29:05.03 コード:0xC020801C 出典:データフロータスクOLE DB先[69] 説明:SSISエラーコードDTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。接続マネージャ "TEST.SpyderDB.TESTUSER"へのAcquireConnectionメソッド呼び出しが、エラーコード0xC0202009で失敗しました。 AcquireConnectionメソッド呼び出しが失敗した理由の詳細については、bef のエラーメッセージが表示されることがあります。 終了エラー エラー:2016-09-23 11:29:05.03 コード:0xC0047017 ソース:データフロータスクSSIS.Pipeline 説明:OLE DB宛先が検証に失敗し、エラーコード0xC020801Cが返されました。 終了エラー エラー:2016-09-23 11:29:05.03 コード:0xC004700C ソース:データフロータスクSSIS.Pipeline 説明:1つ以上のコンポーネントが検証に失敗しました。 終了エラー エラー:2016-09-23 11:29:05.03 コード:0xC0024107 ソース:データフロータスク 説明:タスクの検証中にエラーが発生しました。 終了エラー 警告:2016-09-23 11:29:05.03 コード:0x80019002 ソース:importSCSoldUnits 説明:SSIS警告コードDTS_W_MAXIMUMERRORCOUNTREACHED。 Executionメソッドは成功しましたが、発生したエラー数(5)が最大許容値(1)に達しました。結果として失敗する。これは、エラー数がMaximumErrorCountの数字指定 dに達した場合に発生します。 MaximumErrorCountを変更するか、エラーを修正してください。 終了警告 警告:2016-09-23 11:29:05.03 コード:0x80019002 ソース:パッケージ 説明:SSIS警告コードDTS_W_MAXIMUMERRORCOUNTREACHED。 Executionメソッドは成功しましたが、発生したエラー数(5)が最大許容値(1)に達しました。結果として失敗する。これは、エラー数がMaximumErrorCountの数字指定 dに達した場合に発生します。 MaximumErrorCountを変更するか、エラーを修正してください。 終了警告 DTExec:パッケージの実行によってDTSER_FAILURE(1)が返されました。 開始:11時29分04秒AM 終了:午前11時29分05秒AM 経過:0.172秒 NULL

+1

http://stackoverflow.com/questions/17248560/sql-server-jobs-with-ssis-packages-failed-to-decrypt-protected-xml-node-dtsp 私はこれをチェックアウトだろう。 – Zi0n1

+0

それは解決策でした。 EncryptSensitiveWithPasswordとProject Protection Levelに同じSSIS Package ProtectionLevelプロパティを作成しました。 SSISを実行するためにSQLに追加/削除されたパスワード(保護レベルで使用されるパスワードと同じ)。すべてが正しく機能しています。 –

答えて

0

あなたはSQL 2012以降を使用している場合は、xp_cmdshellをを使用せずに利用できる他のソリューションがあります。

プロジェクトは、プロジェクト展開モデルで、SSISDBカタログに展開する必要があります。

EXEC [SSISDB].[catalog].[create_execution] 
     @folder_name = N'Folder', 
     @project_name = N'Test', 
     @package_name = N'Package.dtsx', 
     @reference_id = NULL, 
     @use32bitruntime = FALSE,  
     @execution_id = @executionID OUTPUT 

    EXEC [SSISDB].[catalog].[set_execution_parameter_value] 
    @executionID, 
    @object_type = 20, 
    @parameter_name = N'Var1', 
    @parameter_value = @Var1 

    EXEC [SSISDB].[catalog].[set_execution_parameter_value] 
    @executionID, 
    @object_type = 20, 
    @parameter_name = N'Var2', 
    @parameter_value = @Var2 

    EXEC [SSISDB].[catalog].[start_execution] @executionID 
+0

ありがとう、私はこれを試して与える必要があります。これは私が試みていたものよりもはるかにクリーンです。 –

関連する問題