2017-09-14 2 views
0

現在、SQLCMDユーティリティを使用してCSVデータをSQL Serverにロードしています。SQLCMDユーティリティが拒否された行をフラットファイルに生成する

sqlcmd -Usa -Pxxx -S192.168.1.223,49546 -dlocal -i"/test.sql" -o"/test.log" 

私はまた、あなたの参照のための私のtest.sqlファイルの内容をコピーした:

SET NOCOUNT ON 
BULK INSERT test FROM 
"\\192.168.1.223\test.csv" 
WITH 
(
MAXERRORS = 1000000, 
CODEPAGE = 1251, 
FIELDTERMINATOR = '~%', 
ROWTERMINATOR = '0x0a' 
) 
GO 
SELECT CONVERT(varchar,@@ROWCOUNT) + ' rows affected' 
GO 

挿入操作は、上記で正常に動作して、以下のデータをロードするには、コマンドプロンプトで実行された私のコマンドがありますプロセス。しかし、私の懸念は、データ型やデータ長によるエラーが発生した場合、行が拒否され、特定の行をトレースすることができないということです。

拒否された行番号のログファイルと、対応する行をチェックするデータファイルを調べるたびに、 悪いファイルを生成するために、SQLPLUSユーティリティ - 私たちはORACLEで持っているなどの

は別のファイルにエラー/拒否された行を生成するための任意のオプションが、ありますか?

答えて

2

私は、あなたが探しているオプションは、sqlcmdのではないと思うが、BULK INSERTで:

ERRORFILE =「file_nameに」

はフォーマットエラーを持つ行を収集するために使用されるファイルを指定してすることはできませんOLE DB行セットに変換されます。これらの行は、データファイル "現状のまま"からこのエラーファイルにコピーされます。

+0

ありがとうございましたetsa、「ERRORFILE」構文を一括挿入に追加する方法を教えてください。上記のSQLスクリプトで説明してください。ありがとう –

+0

いくつかのMSのドキュメントを使用して試して、何か問題がある場合は、あなたの質問に新しいスクリプトを投稿してください。 – etsa

+0

SQLスクリプトファイルにERRORFILE = 'file_name'を追加すると、エラーレコードが別のフラットファイルに作成されます。それは今解決した! –

関連する問題