1

次のことを行う SSIS パッケージがあります。 サーバーのテーブルから接続文字列を選択します。接続文字列は、サーバーの名前とドメイン (つまり、Dalin.myhouse.com) であるか、サーバーへの直接の IP です。

パッケージは、各接続文字列を反復処理し、定義された「グローバル」変数を設定します。この変数は、変数デザイナーで作成されました。接続文字列ごとに、パッケージはサーバーに関する情報を取得します。

私が抱えている問題は、サーバー IP をリストに追加するときに、「フレンドリ名」がその時点でわからない可能性があるため、サーバー IP を接続文字列列とフレンドリ名列の両方に入れることです。テーブル。反復の終了後、そのテーブル内のサーバー エントリのフレンドリ名列を更新して、SERVERPROPERTY('Servername') を使用してサーバーからサーバー名が取得されるようにします。

これを行うには、次のコードで ExecuteSQL タスクを使用したいと思います。

UPDATE [myDB].[mySchema].[myServers]
SET [ServerName] = VarA
WHERE ConnectionString = VarB

前のコードは、myServers テーブルが存在するサーバーへの静的接続を使用しています。

VarA は、SERVERPROPERTY('Servername') を使用して別の SQLTask で設定される ServerName に設定するグローバル値を表します。現在の反復が使用しているのと同じサーバーを使用してサーバーに接続する必要があるため、別のタスクにする必要があります。

VarB は、すべての反復の開始時に、リスト内の次の接続文字列に設定されます。

これをスクリプト タスクとスクリプト コンポーネントに使用する方法の例を見てきましたが、単純に ExecuteSQL タスクを使用してこれを達成したいと思います。

概要:
ServerA に接続し、2 つのグローバル変数を入力します。
ServerB に接続し、2 つのグローバル変数を使用してテーブル内の特定の行を更新します。

何か案は?

4

2 に答える 2

1

ExecuteSQLタスクはデータベース接続に設定する必要があるため、スクリプトタスク内で変数を設定しないと、これをどのように実行できるかわかりません。スクリプトタスクは、それらの接続がそれらを実行しているサーバーのコンテキスト内にあるため、このために機能します。そうは言っても、変数をローカルサーバーインスタンスに設定するこのExecuteSQLタスクの前にスクリプトタスクを使用することができます。

于 2008-12-16T15:42:08.227 に答える
0

それで、パラメータを取るためにSQLの実行タスクが必要ですか?

http://msdn.microsoft.com/en-us/library/ms187685.aspx

多分私は誤解しました...

于 2008-12-17T04:00:43.117 に答える