SSIS を使用する際に確認しておきたい情報

■ファーストステップ
Integration Services のチュートリアル	https://technet.microsoft.com/ja-jp/library/jj720568.aspx
SQL Server 2012 自習書	https://www.microsoft.com/ja-jp/server-cloud/local/sqlserver/2012/technology/self-learning.aspx

■外部のデータを付与する際のパターン
Lookup Pattern: Range Lookups	https://blogs.msdn.microsoft.com/mattm/2008/11/25/lookup-pattern-range-lookups/
Lookup	https://blogs.msdn.microsoft.com/mattm/tag/lookup/

■式による接続の変更
手順 3: フラット ファイル接続マネージャーの変更	https://msdn.microsoft.com/ja-jp/library/ms166797.aspx

■関数
関数 (SSIS 式)	https://msdn.microsoft.com/ja-jp/library/ms141671.aspx
Cast (SSIS 式)	https://msdn.microsoft.com/ja-jp/library/ms141704.aspx

■派生列等を設定する際の条件を変数に書き出す
SSIS - How to Write Expressions on Data Flow Task for Derived Column Transformation Expressions for derived column 	http://www.techbrothersit.com/2011/03/ssis-write-expression-on-data-flow-task.html
	        • データフロータスクの Expression を操作して変更する

■変数の外部ファイル化 (パッケージ配置構成にする必要がある)
手順 4: パッケージ構成の追加	https://msdn.microsoft.com/ja-jp/library/ms365339.aspx
Integration Services (SSIS) パッケージとプロジェクト パラメーター	https://msdn.microsoft.com/ja-jp/library/hh213214.aspx
Integration Services (SSIS) プロジェクトとパッケージの配置	https://msdn.microsoft.com/ja-jp/library/hh213290.aspx

■コンポーネント
制御フロー	https://msdn.microsoft.com/ja-jp/library/ms137681.aspx
データ フロー	https://msdn.microsoft.com/ja-jp/library/ms140080.aspx
Tumbling Dice	http://outofmem.hatenablog.com/archive/category/SSIS

データフローのバッファサイズ	https://blogs.msdn.microsoft.com/sqlperf/2007/05/11/adjust-buffer-size-in-ssis-data-flow-task/
データ フロー パフォーマンス機能	https://msdn.microsoft.com/ja-jp/library/ms141031.aspx

Foreach ループ コンテナー	https://msdn.microsoft.com/ja-jp/library/ms141724.aspx
	        • SQL 実行タスクで実行した SQL の結果を Object 型の変数に格納し、その変数の情報をもとに、Foreach を実行することも可能
カスタム タスクにおけるデバッグのサポートの追加	https://msdn.microsoft.com/ja-jp/library/ms136129.aspx
	        • Foreach ループ コンテナーを右クリックし、「ブレークポイントの編集」から「ループの繰り返しの開始点で停止します」を有効にするとデバッグをしやすい

■SQL の実行
クエリ パラメーターを SQL 実行タスクの変数にマップする方法	https://msdn.microsoft.com/ja-jp/library/ms140355.aspx
結果セットを SQL 実行タスクの変数にマップする	https://msdn.microsoft.com/ja-jp/library/ms141689.aspx
SQL 実行タスクにおける結果セット	https://msdn.microsoft.com/ja-jp/library/cc280492.aspx

■パッケージの実行ログ
[SSIS] パッケージログの出力方法	https://blogs.msdn.microsoft.com/jpsql/2015/01/13/ssis/
スクリプト コンポーネントでのログ記録	https://msdn.microsoft.com/ja-jp/library/aa337076.aspx
スクリプト タスクでのログ記録	https://msdn.microsoft.com/ja-jp/library/ms136131.aspx

■コマンドラインユーティリティ
dtexec ユーティリティ	https://msdn.microsoft.com/ja-jp/library/hh231187.aspx
パッケージ実行ユーティリティ (DtExecUI) の UI リファレンス	https://msdn.microsoft.com/ja-jp/library/ms180378.aspx

■スクリプト
スクリプト コンポーネントのコーディングおよびデバッグ	https://msdn.microsoft.com/ja-jp/library/ms136033.aspx
スクリプト コンポーネント エディターでのスクリプト コンポーネントの構成	https://msdn.microsoft.com/ja-jp/library/ms135927.aspx
特定の種類のスクリプト コンポーネントの開発	https://msdn.microsoft.com/ja-jp/library/ms345170.aspx
スクリプト コンポーネントによる非同期変換の作成	https://msdn.microsoft.com/ja-jp/library/ms136133.aspx
	        • 「<出力名>_ProcessInputRow」で「<出力名>Buffer」に対して、「AddRow」することで処理を進めていく
	                ○ バッファとしてまとまったデータを受け取り、そのバッファに対して処理を進めていく
	                ○ 「<出力名>_ProcessInput」のメソッドをオーバーライドすることで、「<出力名>_ProcessInputRow」に入力バッファの行を送る際の処理をカスタマイズすることもできる
	                        § ComponentWrapper.cs　のメソッドをオーバーライドしている
	        • while(Row.NextRow()){} で書いてしまうと、最初の1行がスキップされてしまうため、do{}while(Row.NextRow()) で記載する？
	                ○ 処理をした感じでは、最初の 1 行がスキップされることはなさそうであったが。
	        • 非同期でのデータ処理の場合、「ExclusionGroup」「SynchronousInputID」は 0 となる
スクリプト コンポーネントによる同期変換の作成	https://msdn.microsoft.com/ja-jp/library/ms136114.aspx
	        • 「<出力名>_ProcessInputRow」の引数として渡された Row をインプット、「<出力名>Buffer」を出力とし、出力バッファに適宜内容を格納しながら処理を進めていく
	        • 全てのデータをスクリプトタスクで蓄えてから後続の処理を実施する場合使用 (後続でソートをする場合等)
	        • 出力の分岐 (条件によって、データを出力する出力を変更 / 同一のデータを複数の出力に出力) をさせるためには、「ExclusionGroup」を 1 以上の同値とし、「SynchronousInputID」を揃える。これにより、DirectRowTo<outputbuffer> が使用できる
スクリプト タスクを使用した Excel ファイルの操作	https://msdn.microsoft.com/ja-jp/library/ms403358.aspx
スクリプト タスクによるパッケージの拡張	https://msdn.microsoft.com/ja-jp/library/ms136127.aspx
RunningPackage.Stop Method ()	https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.runningpackage.stop.aspx
パッケージの停止	        • Dts.TaskResult = ScriptResult.Failure でも大丈夫かもしれない？

■DataReader による他のアプリケーションでの結果セットの利用
DataReader 変換先	https://msdn.microsoft.com/ja-jp/library/ms140291.aspx
ローカル パッケージの出力の読み込み	https://msdn.microsoft.com/ja-jp/library/ms135917.aspx

■DataSet
Visual Studio 2005によるWindowsデータベース・プログラミング	http://www.atmarkit.co.jp/ait/articles/0701/20/news016.html
ADO.NET 	http://devlights.hatenablog.com/archive/category/ADO.NET

■SQL 実行タスクで取得された完全な結果セットの利用
SSIS Design Pattern - Read a DataSet From Variable In a Script Task	http://sqlblog.com/blogs/andy_leonard/archive/2007/10/14/ssis-design-pattern-read-a-dataset-from-variable-in-a-script-task.aspx
All About SSIS Variables - Part 2: Objects	https://www.codeproject.com/Articles/822652/All-About-SSIS-Variables-Part-Objects
SSIS - How To Read Object Type Variable In Script Task [Script Task SSIS]	http://www.techbrothersit.com/2013/07/ssis-how-to-read-object-type-variable.html
SSIS - How to access a RecordSet variable inside a Script Task	http://stackoverflow.com/questions/2596992/ssis-how-to-access-a-recordset-variable-inside-a-script-task
方法 : DataTable の特定の行を探す	https://msdn.microsoft.com/ja-jp/library/y06xa2h1.aspx

■カスタムスクリプトで使用されているクラス
Microsoft.SqlServer.Dts.Pipeline 名前空間	https://technet.microsoft.com/ja-jp/library/microsoft.sqlserver.dts.pipeline.aspx
ScriptComponentHost クラス	https://technet.microsoft.com/ja-jp/library/microsoft.sqlserver.dts.pipeline.scriptcomponenthost.aspx
Microsoft.SqlServer.Dts.Tasks.ScriptTask 名前空間	https://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.dts.tasks.scripttask.aspx
ScriptTask クラス	https://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.dts.tasks.scripttask.scripttask.aspx
ScriptObjectModel クラス	https://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.dts.tasks.scripttask.scriptobjectmodel.aspx
ScriptBuffer クラス	https://technet.microsoft.com/ja-jp/library/microsoft.sqlserver.dts.pipeline.aspx

■トランザクション
Known Issue: SSIS パッケージの TransactionOption オプションを Required とすると、パッケージの動作が停止しているように見える。	https://blogs.msdn.microsoft.com/jpsql/2012/06/22/known-issue-ssis-transactionoption-required/
Integration Services のトランザクション	https://msdn.microsoft.com/ja-jp/library/ms137690.aspx
トランザクションを使用するようにパッケージを構成する	https://msdn.microsoft.com/ja-jp/library/ms141144.aspx

■デバッグ
スクリプト タスクのコーディングおよびデバッグ	https://msdn.microsoft.com/ja-jp/library/ms135952.aspx
スクリプト タスクとスクリプト コンポーネントにブレークポイントを設定してスクリプトをデバッグする	https://msdn.microsoft.com/ja-jp/library/ms140033.aspx
データ フローのデバッグ	https://msdn.microsoft.com/ja-jp/library/ms137944.aspx
[データ ビューアー]	https://msdn.microsoft.com/ja-jp/library/ms186560.aspx
スクリプトコンポーネントはデバッグできないようだが、スクリプトタスクはデバッグ可能 
デバッグできない場合は、プロジェクトの 64 ビットデバッグを False にすることも検討
(64 ビットであれば、スクリプトタスクだけでなく、スクリプトコンポーネントもデバッグできた)

■エラー処理
データ フロー コンポーネントでエラー出力を構成する	https://msdn.microsoft.com/ja-jp/library/ms140083.aspx
データのエラー処理	https://msdn.microsoft.com/ja-jp/library/ms141679.aspx
手順 3 : エラー フロー リダイレクトの追加	https://msdn.microsoft.com/ja-jp/library/ms166707.aspx

■変数
システム変数	https://msdn.microsoft.com/ja-jp/library/ms141788.aspx
変数のウォッチ	http://bidn.com/Blogs/ssis-tips-watch-your-variables

■イベントハンドラー
Integration Services (SSIS) のイベント ハンドラー	https://technet.microsoft.com/ja-jp/library/ms140223.aspx