0

プログラムで接続文字列を設定する際に問題が発生しています。

これが私のプロジェクトの概要です。私は 2012 SSIS を使用しており、接続マネージャーに 2 つの接続があります (ソースと宛先で、どちらも OLE DB 接続です)。実行したいパッケージが複数あります。これらの各パッケージには、SQL 実行タスクのみが含まれています。各タスクでは、SQL ステートメントの接続タイプを OLE DB に設定し、接続は宛先、SQL ソース タイプはファイル接続、ファイル接続は C ドライブにあるファイルであり、C ドライブで生成したスクリプト ファイルです。プログラム。

これらのパッケージを 2012 インスタンスであるサーバーにデプロイしました。ソース接続と宛先接続も私のサーバーにありますが、2008 R2 インスタンスにあります。

N 個のデータベースをループします。各ループで、次の SQL ステートメントを実行して、接続文字列と IntialCatalog プロパティを設定できます。

DECLARE @var sql_variant = N'Data Source=MyServerName\SQL2008R2;Initial Catalog=DatabaseName1;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;'

EXEC [SSISDB].[catalog].[set_object_parameter_value] @object_type=20、@parameter_name=N'CM.Destination.ConnectionString'、@object_name=N'MAC'、@folder_name=N'MAC'、@project_name=N' MAC'、@value_type=V、@parameter_value=@var

プロジェクトの設定オプションを開いて、プログラムのステップ実行中に接続文字列と初期カタログ値が変化することを確認できるため、これは機能します。(最初のカタログの SQL は含めませんでしたが、接続文字列に似ています)

プログラムでこれを実行すると、次のエラーが発生します。

接続「{9C2C8088-CE67-4D93-81B8-EC364D6E78D1}」が見つかりません。このエラーは、指定された接続要素が見つからない場合に Connections コレクションによってスローされます。

SQL 実行タスクの接続が更新されるようにパッケージを更新する方法はありますか?

ちなみに、Visual Studio でパッケージを開いて接続を変更すると、パッケージが実行されます。プログラムで接続を変更して実行しようとしたとき、またはエラーが発生したときにサーバーにデプロイされたパッケージを実行しようとしたときです。

私はこの質問を見ました。似ていますが、別の質問をするのに十分なほど異なると思います。 パッケージ に SSIS 接続が見つかりません。ここで多くの素晴らしい情報を見つけましたが、まだ探しているものではありません.

どんな助け/アドバイスも大歓迎です!

ありがとう

マーク

4

1 に答える 1

0

私の提案は、SSIS の Foreach ループ コンテナーを利用して、データベース ループと接続文字列の設定をパッケージ内に移動することです。

  1. パッケージに新しい文字列変数を作成します。「User::DestinationConnectionString」と呼びます。
  2. 宛先接続を右クリックし、[プロパティ] を選択します。
  3. 接続の ConnectionString プロパティの式を作成し、 User:DestinationConnectionString 変数に設定します。
  4. すべての接続文字列をテーブルに入れます。これを ConnectionStrings と呼びましょう。
  5. パッケージの先頭に SQL 実行タスクを作成します。これを「接続文字列の取得」としましょう。
  6. ConnectionStrings テーブルがある場所への接続を設定します。
  7. 接続文字列を取得するクエリを記述します。
  8. ResultSet を完全な結果セットに設定します。
  9. 結果セットを Object 型の変数に設定します。これを User::ConnectionStrings と呼びましょう。(結果名は 0 である必要があります。)
  10. ForEach ループ コンテナーを作成します。「接続文字列ごと」という名前を付けます。
  11. コレクション列挙子を Foreach ADO Enumerator に設定します。
  12. ADO オブジェクト ソース変数を User::ConnectionStrings に設定します。
  13. [変数マッピング] タブで、Index 0 を User::DestinationConnectionString 変数にマップします。
  14. foreach ループ内に SQL 実行タスクを配置します。

パッケージが実行されると、各接続文字列がループされ、接続が接続を取得するために使用する変数に割り当てられ、SQL タスクが実行されます。

実行時までデータベース接続文字列がわからない場合は、それらをテーブルに書き込んでから、パッケージを開始できます。

于 2013-06-06T19:20:04.573 に答える