0

このStackOverflowの記事の成功を繰り返して、CSVファイルのNULL値をNULLを許可するテーブル列に転送しようとすると問題が発生します。

このCSVファイルで、テキスト区切り文字=二重引用符、列区切り文字=コンマを指定します。2つのレコードと、最後から3番目と4番目の列、それぞれ「CELL_TXT」と「CELL_VAL」があることに注意してください。最初の列「CELL_TXT」には、テキスト値が含まれています。このテキスト値を数値に評価できる場合、CELL_VALにはこの数値が含まれ、それ以外の場合はNULLになります。

"FLDR","FILE_NM","TAB_IDX","TAB_NM","TAB_PART","LABEL_DESGTR","LABEL_TXT","SECT_NM","SEG_NM","COLMN_TXT","ROW_IDX","COLMN_IDX","COLMN_LETTR","CELL_TXT","CELL_VAL","LAST_OPER_ID","LAST_TIMESTMP"
"C:\corp_mlr_rebates\Processing\HHS\CGLIC","MLR_Template_CGLIC_Grand_Total.xls","1","Pt 1 and 2","Part 1","1.","Premium","Health Insurance Coverage","Individual","Total as of 12/31/11","19","6","F","2",2,"HHSSWEEP","1/15/2013 1:40:20 PM"
"C:\corp_mlr_rebates\Processing\HHS\CGLIC","MLR_Template_CGLIC_Grand_Total.xls","1","Pt 1 and 2","Part 1","1.","Premium","Health Insurance Coverage","Individual","3/31/12","19","7","G","",,"HHSSWEEP","1/15/2013 1:40:20 PM"

2行目では、CELL_TEXTが空白の ""であったため、CELL_VALはCSVファイルにNULLとして格納され、前の列区切り文字の直後に連続するコンマ列区切り文字で示されていることに注意してください。

このファイルをCELL_VALテーブルでNULLを許可するテーブルにインポートしようとしています。これが完全な表ですが、CELL_TXT、特にCELL_VAL列に関心があります。

CREATE TABLE [dbo].[HHS_GRD_STG](
    [FLDR] [varchar](255) NOT NULL,
    [FILE_NM] [varchar](80) NOT NULL,
    [TAB_IDX] [int] NOT NULL,
    [TAB_NM] [varchar](80) NOT NULL,
    [TAB_PART] [varchar](80) NOT NULL,
    [LABEL_DESGTR] [varchar](80) NOT NULL,
    [LABEL_TXT] [varchar](255) NOT NULL,
    [SECT_NM] [varchar](80) NOT NULL,
    [SEG_NM] [varchar](80) NOT NULL,
    [COLMN_TXT] [varchar](80) NOT NULL,
    [ROW_IDX] [int] NOT NULL,
    [COLMN_IDX] [int] NOT NULL,
    [COLMN_LETTR] [char](2) NOT NULL,
    [CELL_TXT] [varchar](255) NOT NULL,
    [CELL_VAL] [decimal](14, 4) NULL,
    [LAST_OPER_ID] [char](8) NOT NULL,
    [LAST_TIMESTMP] [datetime] NOT NULL
) ON [PRIMARY]

SSISでは、入力ファイルオブジェクトを「テキスト修飾子」と行の区切り文字として{CR}{LF}を使用してカンマ区切りファイルとして定義します。

データフロータスクで、ファイルソースオブジェクトの「Null値の保持」をtrueに設定しました。宛先のTableオブジェクトでも、「Keep Nulls」プロパティを設定しましたが、パッケージを実行すると、次のエラーが発生します。

Error: 0xC0202009 at Load HHS Child tables, HHS_GRD_STG Table [579]: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 10.0"  Hresult: 0x80004005  Description: "Unspecified error".
Error: 0xC020901C at Load HHS Child tables, HHS_GRD_STG Table [579]: There was an error with input column "CELL_TXT" (659) on input "OLE DB Destination Input" (592). The column status returned was: "The value violated the integrity constraints for the column.".
Error: 0xC0209029 at Load HHS Child tables, HHS_GRD_STG Table [579]: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  The "input "OLE DB Destination Input" (592)" failed because error code 0xC020907D occurred, and the error row disposition on "input "OLE DB Destination Input" (592)" specifies failure on error. An error occurred on the specified object of the specified component.  There may be error messages posted before this with more information about the failure.
Error: 0xC0047022 at Load HHS Child tables, SSIS.Pipeline: SSIS Error Code DTS_E_PROCESSINPUTFAILED.  The ProcessInput method on component "HHS_GRD_STG Table" (579) failed with error code 0xC0209029 while processing input "OLE DB Destination Input" (592). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running.  There may be error messages posted before this with more information about the failure.

ファイルの最初のレコードがdestテーブルに正常に転送されたことに注意しました。これは、NONNULL値を持つレコードでした。

DestinationテーブルではCELL_VAL列にnullが許可されているのに、なぜこのタスクが失敗するのですか?

[CELL_VAL] [decimal](14, 4) NULL,

フォローアップの質問:

Williamは、列でNULLが許可されていない場合に、別の列にnull値が含まれていることが原因であると指摘しているのは正しいです。

これは、私のパッケージが空の文字列値を区別していないように見えるためです

,"",

およびNULL値

,,

この目的のために、ファイルでテキスト区切り文字として二重引用符を使用するように指定しましたが、役に立たないようです。その結果、「Retain NULLS」への設定はファイルレベルのプロパティのように見えるため、他の列を設定することが本当に必要な場合は、いくつかの列のDDLを「AllowNull」に変更する必要があります。 2つの連続するテキストデリメータで示される値がある場合、長さがゼロの文字列。

SSISにNULLと長さゼロの文字列値を区別させることは可能ですか?

4

1 に答える 1

2

表示されているエラーは、CELL_VAL列ではなく、CELL_TXTに関するもののようです。

There was an error with input column "CELL_TXT" (659) on input "OLE DB Destination
Input" (592). The column status returned was: "The value violated the integrity 
constraints for the column.".

これは、列CELL_TXTに外部キー関係またはその他の制約があり、そのため空白値が許可されていないことを示しているように見えます。

CELL_VALのnull値とは何の関係もありません。

于 2013-01-15T19:37:25.967 に答える