Google でかなりの時間を費やし、Microsoft SQL Server 2008 の SSIS ドキュメントに目を通した後、ようやく解読できました。自分をとても誇りに思っています。したがって、解決策は次のとおりです。
- SQL Server Business Intelligence Development Studio で、新しい SSIS パッケージを作成します。
- mine と という 3 つの変数を作成
startDate
しendDate
ますstrDataSourceSQL
。それらがすべてパッケージのスコープ レベルを持っていることを確認し、データ型がそれぞれInt32
、Int32
およびString
..
Script Task
[制御フロー] タブで、ツールボックスから [制御フロー] ペインに をドラッグします。それを右クリックし、ポップアップ メニューから [編集] を選択します。
Script
ページで、 の右側にある省略記号をクリックしますReadWriteVariables
。手順 1 で作成した変数、つまりuser::startDate
、user::endtDate
およびにチェックマークを付けますuser::strDataSourceSQL
。でスクリプト タスクの名前を変更できますGeneral page
。それは良い習慣です。
Script
ページで、ボタンをクリックして、事前Edit Script...
に作成されたコードを含む Visual Studio IDE ペインを表示します。
次の変更を行います。ページの上部に、使用する名前空間とクラスをインポートするための数行があります。コード行を編集して、次の行があることを確認します。
システムを使用する;
System.Data の使用;
Microsoft.SqlServer.Dts.Runtime を使用します。
System.Data.OleDb を使用します。
メニューの [プロジェクト] > [参照の追加] に移動します。[.NET] タブで、必ず選択してください。
Microsoft.SqlServer.DTSPipelineWrap
とMicrosoft.SqlServer.DTSRuntimeWrap
ヒントはDotNetMonsterの功績によるものです。
の中に
public void Main()
メソッドを実行すると、次のようなコメントが表示されます// TODO: ここにコードを追加します
その行を置き換えるか、次のコード行を追加します。ところで、データ ソースとデータ送信先に OLEDB を使用しています。
//変数を宣言する
Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerDatabaseParameters100 cmParams;
System.Data.OleDb.OleDbConnection oleDbConn;
ConnectionManager cm;
Int32 strStartDate;
Int32 strEndDate;
String startDateSQL = "SELECT StartDate FROM DATE_RANGE_CONTROL";
String endDateSQL = "SELECT EndDate FROM DATE_RANGE_CONTROL";
//Declare and assign Connection manager
cm = Dts.Connections["YOUR_OLEDB_CONNECTION_MANAGER_NAME"];
//Set Connection paramters
cmParams = cm.InnerObject as Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManagerDatabaseParameters100;
//Instantiate the Oledb connection
oleDbConn = cmParams.GetConnectionForSchema() as OleDbConnection;
後で表示する関数の実行結果である変数strStartDate
と変数を割り当てます。strEndDate
OLEDB 接続に SQL コマンドを提供するだけです。
strStartDate = (int)assignSQLCommand(startDateSQL,oleDbConn).ExecuteScalar();
strEndDate = (int)assignSQLCommand(endDateSQL, oleDbConn).ExecuteScalar();
// startDate 変数と endDate 変数に SQL 結果セットの値を割り当てます
Dts.Variables["開始日"].Value = strStartDate;
Dts.Variables["endDate"].Value = strEndDate;
文字列型の変数dataSourceSQL
を宣言し、それに DataSource SQL コードを割り当てます。日付範囲の値を上記の変数の値に置き換えます。私にとって、コードは次のとおりです。
String dataSourceSQL = "SELECT COLUMN1,COLUMN2,COLUMN3,TRANSACTION_DATE
FROM SOURCE_DATABASE_TABLE
WHERE TRANSACTION_DATE BETWEEN '"+Dts.Variables["startDate"].Value +"' AND '"+Dts.Variables["endDate"].Value+"'";
次に、の値をdataSourceSQL
パッケージstrDataSourceSQL
変数に割り当てます
Dts.Variables["strDataSourceSQL"].Value = dataSourceSQL ;
メソッドの中かっこの外側に、public void Main()
前に説明した次の関数を追加します。
public OleDbCommand assignSQLCommand(String SqlCommand, OleDbConnection oledbconn)
{
新しい System.Data.OleDb.OleDbCommand(SqlCommand, oledbconn) を返します。
}
メニューの [ビルド] > [ビルド [スクリプト名]] に移動します。保存してスクリプト ページを閉じます。最後に、データ ソース タスクを作成するだけです。タブに移動しData Flow
、OLE DB DB ソースをペインにドラッグします。OLE DB ソースを右クリックし、[編集] を選択します。[接続マネージャー] ページで、OLE DB 接続マネージャーを選択し、Data access mode
[ SQL command from variable
. 変数名で を選択しますuser::strDataSourceSQL
。スクリプト タスクをデータ フローの前に実行するように設定していれば、作業は完了です。