web-dev-qa-db-ja.com

BCP-IDENTITY列のあるテーブルにインポートするときのキャスト指定の文字値が無効です

UNIXからSQLServerにファイルを読み込もうとしています。 BCPを実行すると、以下のエラーが発生しますが、データ型をCharに変更すると、同じファイルをロードできました。

使用したコマンド:

--bcp [SQLAAA].[APP_XXX].[ACTIVITY_V1] in /home/XXX_ACTIVITY.txt -c -S xddb001 -e /home/ERRORS.log -t "|" -r "\n" -U test12 -P test12

ソースファイル:

222|2017-12-27|Y|ABC|2017-12-27|ABC|2017-12-27
255|2018-01-04|N|ABC|2018-01-04|ABC|2018-01-04

エラーメッセージ:

@行1、列7:キャスト指定の文字値が無効です@

定義表:

CREATE TABLE [APP_XX].[ACTIVITY]
(
[C1] [varchar](10) NOT NULL,
[C2_DATE] [date] NOT NULL,
[c3] [varchar](1) NULL,
[C4_NM] [varchar](10) NULL,
[C5_DTM] [date] NULL,
[C6_NM] [varchar](10) NULL,
[C7_DTM] [date] NULL,
[ROW_ID] [bigint] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]

どのような変更が可能か教えていただけますか?

3
vedamurthy

IDENTITY列のあるテーブルにインポートする場合、インポートファイルでIDENTITY列の値を指定しない場合は、インポートでIDENTITY列がスキップされることをフォーマットファイルで指定する必要があります。

この作業方法は、 BCPに関するMicrosoftのドキュメント、フラグ-E で明示的に言及されています。

データファイルにテーブルまたはビューのID列の値が含まれていない場合は、フォーマットファイルを使用して、データをインポートするときにテーブルまたはビューのID列をスキップするように指定します。 SQL Serverは、列に一意の値を自動的に割り当てます。[...]

するべきこと:

  1. 最初 BCPを使用してフォーマットファイルを作成します 。例えば。非XML形式のファイルの場合、コマンドはBCP table_or_view format nul -f format_file_nameのようになります。
  2. フォーマットファイルのIDENTITY列をスキップするように指定します
  3. BCP BCP INフラグ を使用して-fコマンドで作成したフォーマットファイルを使用します
1
TT.