現在、ルーチンRUNS DAILYがあり、数十のフラットテキストファイルをfoxproにインポートしています。これをTSQLに変換する作業をしています。コマンドを使用していBULK INSERT
ます。
数十のフラットファイルごとにSQLコマンドとXMLファイルを作成しました(フォーマットごとに1つ)。
ファイルごとに、コマンドラインから次のような変換を呼び出します。
sqlcmd -d MYDB -i Import_FILEA.sql -o Output_FILEA.txt
それはうまく機能します(それが機能するとき)。問題は、データが送信前にデータを検証しないソースからのものであるということです。私は彼らを責めません。私はこれらのことがどのように起こり得るかを知っています。しかし今、私はその場にいます。
私のSQLスクリプトは次のようになります。
SET LANGUAGE us_english;
GO
SET DATEFORMAT ymd;
GO
DELETE FROM [MyDB].[dbo].[FILEA];
GO
BULK INSERT
[MyDB].[dbo].[FILEA]
FROM 'C:\Documents and Settings\somewhere\FILEA.DAT'
WITH
(
DATAFILETYPE ='CHAR',
FORMATFILE='C:\Documents and Settings\somewhere\translate_FILEA.xml',
ERRORFILE ='C:\Documents and Settings\somewhere\ERR_FILEA.TXT',
LASTROW = 400000
)
GO
LASTROW
引数はデバッグのみを目的としています。問題は、これが失敗すると、完全に失敗し、問題の原因となっている行またはフィールドを教えてくれないことです。エラーファイルは作成されません。作成された場合は、すぐに破棄されます。(ファイルが作成されてから消えるのを見ることができます-最悪のことです。)
文字フィールドではないごく少数のフィールドをチェックするために、perlスクリプトまたは正規表現を使用してコンパイルされたvbaを作成したいということにとてもイライラしています。それは小さなことですが、それは余分です-そして私は次の人がそれを維持することを心配しています。(他の人がperlでプログラムしたり、.netの正規表現に精通しているとは思いません)さらに、MSDNのドキュメントではbulk insert
、エラーファイルの問題行を報告する必要があるようです。
何か案は?これは既知の問題ですか?欠落しているパラメーターはありますか?これを回避する別の方法はありますか?または、外部データ形式チェッカーは正しい方法ですか?