1

SSIS プロジェクトで、接続マネージャーの接続文字列を保持する変数を設定する方法を知っていますが、逆にするにはどうすればよいでしょうか? つまり、既存の SSIS パッケージがあり、特定の接続マネージャーの接続文字列を提供する変数の名前を調べたいと考えています。

セットアップ方法に関する参照がたくさんありますが、[接続マネージャー] > [プロパティ] > [式] に移動すると表示されることを期待していましたが、表示されません。パッケージ構成オーガナイザーに移動し、適切な名前のパラメーターを選択して編集し、ウィザードの2番目のダイアログに移動して、エクスポートされたプロパティ名を見つけることで、なんとかそれを見つけることができました. これが唯一の方法ではないはずですよね?

よろしく、スチュワート

編集 - これは Visual Studio 2008 にあります

4

3 に答える 3

2

まず、BIDSHelperを入手します。これは Visual Studio 用の無料のアドインであり、少なくとも、要素に式と構成が適用されているかどうかを識別するのに役立ちます。1 つはティール色のハイライト、もう 1 つはフューシャ色のハイライトで、はい、オブジェクトは両方を持つことができます。

あなたが説明した最初のシナリオでは、プロパティ、式を見て、式の使用を識別します。その他のオブジェクトについては、[式] タブを確認する必要がある場合があります。

構成の動作は異なります。環境変数、レジストリ値、親パッケージ値、XML ファイル、または SQL Server テーブルを使用できます。最初の 3 つは、構成値と構成済みアイテム (変数、接続マネージャーなど) の間の 1:1 マッピングを提供します。XML と SQL Server では、多くの項目を構成できます。5 つの構成エントリがあり、それぞれが同じ設定を異なる値で変更する可能性があるため、構成が適用される順序は重要です。2005 と 2008 で構成を適用する方法にも違いがあるため、「Integration Services が構成を適用する方法について」を参照してください。

パッケージがロードされると、BIDS はロードしようとしている構成を示します (出力ウィンドウを見てください)。BIDS の強調表示とこれらのメッセージ以外に、これらのメッセージは、構成が存在し、適用されていることを示すもう 1 つの手がかりです。これは、欠落している構成を検出する機会でもあります (構成 X を見つけることを期待していましたが、見つからなかった = 構成リソースが存在しません) または (プロパティ X を構成することを期待していましたが、見つからなかった = 構成されているものが存在しません)。存在)

最善のアプローチは、環境内のすべてのアプリケーションが使用する構成の共通セット (販売接続、倉庫接続) を定義し、一貫した構成命名アプローチを使用することであることがわかりました。次に、プロジェクト レベルのものにカスタム構成を使用し (InsuranceProcessing パッケージの入力と出力のパスはすべてのパッケージに適用されますが、Sales の場合は異なります)、パッケージ固有の 3 番目の構成セットを使用します。これには SQL Server テーブルを使用します。これにより、多くの見苦しい XML を調べるよりも、値の検査がはるかに簡単になります。

多くの情報がありますが、あなたの質問に直接答えるものはありません。申し訳ありません。オブジェクト モデルを調べて、何が構成されているかを調べることはできるかもしれませんが、それは見苦しいものです。

于 2012-10-18T11:59:39.413 に答える
1

上記の回答のおかげで、変数ではなく構成であることがわかりました。それが明らかになると、さらにググると、パッケージ構成オーガナイザーでターゲット オブジェクトが空白になっている理由が説明されました (複数存在する可能性があります)。

答えは構成データベースにあります。PackagePath エントリは \Package.Connections[接続マネージャー名].Properties[ConnectionString] を保持しているため、特定のマッピングがどこから来たのかを調べるには、次のようなものを使用します。

    SELECT TOP 1000 [ConfigurationFilter]
  ,[ConfiguredValue]
  ,[PackagePath]
  ,[ConfiguredValueType]

FROM [Database].[dbo].[Configurations_table] where ConfiguredValue like '%object in which you are interested'%'

(すべてがコード ブロックに入らなかった理由がわからない)。

私はまだそれがより簡単であるべきだと思いますが、これが他の人に役立つことを願っています.

よろしく、スチュワート

于 2012-10-23T10:11:09.587 に答える
0

billinkcによる素晴らしい答え。その答えに加えて(または「オブジェクトモデルを調べて構成内容を確認する」部分を具体化する)、すべての接続マネージャー接続文字列の値を出力ウィンドウに追加するスクリプトをパッケージの先頭で実行します。その後に、各マネージャーの接続文字列式が続きます。さらに、スクリプトで使用するために指定されたすべての変数をループし、値を出力します。本番環境ではそれほど有用ではありませんが、開発/テスト時には非常に役立ちます。

パッケージフローの先頭にスクリプトタスクを追加し、デバッグする変数を指定してから、次のコードをスクリプトに追加するだけです。

    'Report number of connections
    Dts.Events.FireInformation(99, "debug", "number of connections = " & Dts.Connections.Count, "", 0, True)

    'Loop through connection collection
    For Each cConnection As Microsoft.SqlServer.Dts.Runtime.ConnectionManager In Dts.Connections

        'Report connection string value
        Try
            Dts.Events.FireInformation(99, "debug", "connection """ & cConnection.Name & """ value = " & cConnection.ConnectionString, "", 0, True)
        Catch
        End Try

        'Report connection string expression
        Try
            Dts.Events.FireInformation(99, "debug", "connection """ & cConnection.Name & """ constring  expression = " & cConnection.GetExpression("ConnectionString"), "", 0, True)
        Catch
        End Try

    Next

    'Report number of variables
    Dts.Events.FireInformation(99, "debug", "Number of Variables = " & Dts.Variables.Count, "", 0, True)

    'Loop through variables collection
    For Each vVariable As Microsoft.SqlServer.Dts.Runtime.Variable In Dts.Variables

        'Report variable value
        Try
            Dts.Events.FireInformation(99, "debug", "Variable """ & vVariable.Name & """ value = " & vVariable.Value, "", 0, True)
        Catch
        End Try

    Next
于 2012-10-18T20:05:34.883 に答える