4

質問

エラーをスローする代わりに、値をキャストしてキャストが許可されていない場合にNULLを返すように SSIS に依頼することは可能ですか?

私の環境

Windows Server 2003 で Visual Studio 2005 と Sql Server 2005 を使用しています。

一般的な文脈

興味のある方のために、私の使用例を示します。どこかからのデータを汎用テーブル (履歴付きのキー/値構造) に保存する必要があります。このテーブルには、文字列、数値、または日付のいずれかの値が含まれています。構造は次のようなものです。

table Values {
    Id int,
    Date datetime, -- for history
    Key nvarchar(50) not null,
    Value nvarchar(50),
    DateValue datetime,
    NumberValue numeric(19,9)
}  

Value列に生の値を入れて、同じ値を入れてみたくて

  • Datetime にキャストできる場合は DateValue 列に
  • 数値にキャストできる場合は NumberValue 列に

これらの 2 つの型指定された列により、後であらゆる種類の集計と操作がはるかに簡単かつ高速になります。

これで、なぜ私がこの奇妙な質問をしているのかがわかりました。

============

よろしくお願いします。

4

3 に答える 3

1

これと同じ種類のことを扱っていると、SSIS のエラー処理が十分に具体的ではないことがわかりました。私のアプローチは、実際にエラー テーブルを作成し、データが varchar として格納されているソース テーブルをクエリし、以下のようなエラー テーブルにエラーを記録することでした。どの列が失敗したかを知ることが重要だったので、各列について以下のステートメントのいずれかを使用しています。次に、すべてのエラーをログに記録した後、エラーのない SomeInfo のレコードを選択する INSERT を実行します。あなたの場合、エラー テーブルの ColumnName に基づいて、より高度な処理を実行して、デフォルト値を挿入できます。

INSERT INTO SomeInfoErrors
           ([SomeInfoId]
           ,[ColumnName]
           ,[Message]
           ,FailedValue)    
    SELECT
        SomeInfoId,
        'PeriodStartDate',
        'PeriodStartDate must be in the format MM/DD/YYYY',
                PeriodStartDate
    FROM
        SomeInfo
    WHERE 
        ISDATE(PeriodStartDate) = 0 AND [PeriodStartDate] IS NOT  NULL;
于 2010-03-15T18:38:53.413 に答える
0

条件付き分割を使用して True を設定し、データが日付であるレコードを一方のパスに沿って移動させ、もう一方のレコードを別のパスに沿って移動させ、挿入される前に null に更新されます。

于 2010-03-11T19:33:38.740 に答える