2014年12月3日水曜日

SSISでCSVに空列がある場合の対処法

SSISでデータの欠如のあるCSVを読み込みたいことがある。

A,B,,,,C

ってな具合。

空列をDT_STR等で読み込んだ場合、これが空文字として認識されるので、
DT_DBDATE等に変換しようとすると、エラーとなる。これを回避するためには、スクリプトタスク等で空文字を一度NULLに置換する必要がある。

SSISのスクリプトコンポーネントでエラーコードが参照できない。

SQL Server 2012にて。
SSISのスクリプトコンポーネント内でのエラーは分かりにくいので、try catchしてスタックトレースを拾うわけです。ですが、


componentMetaData.FireError(HResults.DTS_E_WEBSERVICETASK_CONVERT_FAILED, "Process Values", ex.Message, "", 0, out pbCancel);




ところが、HResultsクラスが参照できない。パッケージ読み込んでるのに。


using Microsoft.SqlServer.Dts.Runtime





どうやらMicrosoft.SQLServer.ManagedDTS.dll を参照しなければならないようですが、ローカルにもない。

C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies



こちらから SQL Server 2012のFeature Packをダウンロードしてインストールすると良いようです。
 http://www.microsoft.com/en-au/download/details.aspx?id=29065