質問

うことにより挿入す。csvファイルをデータベースunix linebreaks.のコマンドは私の走りです:

BULK INSERT table_name
FROM 'C:\file.csv' 
WITH 
( 
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n' 
) 

まに変換し、ファイルをWindowsフォーマットの荷重の作品が、いいこのステップの場合を避けることができます。そのアイデア?

役に立ちましたか?

解決

私は同じ問題を抱えていたとして貢献して感じた、と私は一日、少なくとも数回をSAPから2つのUNIXのファイルを読み込む必要があります。代わりにunix2dosといったを使用するので、私はプログラミングを経由して少ない手動の介入や、より自動で何かを必要に応じています。

述べたように、

、CHAR(10)は、SQL文字列内で動作します。私は、SQL文字列を使用したくなかった、と私は使用「」「」「」「+ CHAR(10)+」が、何らかの理由で、これはコンパイルされませんでした。

非常に滑らかな作業でした何だった:との(ROWTERMINATOR = 'は0x0A')

問題がヘックスで解決!

これは誰かに役立ちます願っています。

他のヒント

答えが、私は私の好ましい解決策を発見したすべての人に感謝します。

あなたは 'N \'、それは "\ rを\ n" は(使用してC / C ++表記)を実際にWindowsでデフォルトのロー・ターミネータを意味するものとして、これを解釈し、SQL ServerのROWTERMINATOR =を教えてくれたとき。あなたの行ターミネータが本当に単なる「\ n」はある場合は、以下に示す、動的SQLを使用する必要があります。

DECLARE @bulk_cmd varchar(1000)
SET @bulk_cmd = 'BULK INSERT table_name
FROM ''C:\file.csv''
WITH (FIELDTERMINATOR = '','', ROWTERMINATOR = '''+CHAR(10)+''')'
EXEC (@bulk_cmd)
あなたがBULK INSERTのを言うことができないのはなぜ

...(ROWTERMINATOR = CHAR(10))は私を超えています。あなたは、コマンドのWITHセクション内の任意の式を評価することができますようにそれは見えません。

何上記行い、コマンドの文字列を作成して、それを実行しています。きちんと追加のファイルを作成したり、余分な手順を経る必要性をsidesteppingます。

私は、構文

ことを確認します
ROWTERMINATOR = '''+CHAR(10)+'''
EXECコマンドで使用する場合、

働きます。

あなたが複数ROWTERMINATOR文字を持っている場合(例えばパイプとUnixの改行)は、このための構文は次のとおりです。

ROWTERMINATOR = '''+CHAR(124)+''+CHAR(10)+'''

これは、それよりも少し複雑です!あなたは、SQL ServerのROWTERMINATOR =を伝えるときに「\ n」が、それは「\ rを\ n」は(使用してC / C ++表記)を実際にWindowsでデフォルトのロー・ターミネータを意味するものとしてこれを解釈します。あなたの行ターミネータが本当にただの場合は「\ n」は、あなたは、上記の動的SQLを使用する必要があります。私は、なぜ\を考え出す時間の最良の部分を費やしてきたn個BULK INSERTので使用した場合、本当に\ n個を意味しません!

1つのオプションは、 BCP して使用することで、最大設定します改行文字として'\n'と制御ファイル。

あなたがいないことを好むだろうことが示されましたが、別のオプションを使用することです unix2dosといった '\r\n'改行と一つにファイルを事前処理する。

最後に、あなたはFORMATFILEBULK INSERTオプションを使用することができます。これは、インポート形式を指定するには、BCPの制御ファイルを使用します。

取ることができる2つの一般的な道がある私には見える:SQLスクリプトでCSVを読んだり、あなたは(BCP、unix2dosといったことを行うことができ、多数の方法のいずれかで、あらかじめCSVに変換するためにいくつかの別の方法を、それがある場合には、事の1回限りの王、あなたはおそらく)あなたのためのファイルを修正するために、あなたのコードエディタを使用することができます。

しかし、あなたは余分なステップを持っている必要があります!

このSQLは、プログラムから起動されている場合は、

、あなたはそのプログラムに行末を変換したい場合があります。あなたは、変換を自分でコーディングすることを決定し、その場合には、ここにあなたが注意する必要があるものです。 1.終わる行は\ nをされる可能性があります 2.または\ R \ nは 3.あるいは\ R(マック!) CSVは、

どこから来たのか、あなたがコントロールしない限り、4良い悲しみ、それはいくつかの行をrを\ n \しているし、他の人をn \ある可能性があり、任意の組み合わせが可能です

OK、OK。可能4はこじつけです。これは、電子メールで起こるが、それはまた別の話です。

私は "ROWTERMINATOR = '\ n' は" 働くだろうと思うだろう。私は、あなたが思うような行が終了していることを確認するために「隠し文字」を示しているツールでファイルを開くことをお勧め。私はこのようなもののため++メモ帳を使用します。

憧れがあります。Unixを使LF(ctrl-J)に対して、MS-DOS/Windows用のCR/LF(ctrl-M/Ctrl-J)

ご利用の際は' 'Unixでは、行動の便が良いことから、翻訳、LF文字です。MS-DOS/Windowsで翻訳CR/LF.時のインポート、Unix形式のファイルなので、見るだけでLF.そのため、簡単にファイルをunix2dosます。ものになっているということですそんなこといっているとした場合、あなたは良いない理由で).

ができないのはなぜです:

(ROWTERMINATOR = CHAR(10))

このSQLコードが解析されているので、交換しな、char(10)は、改行文字があっという間に挟んで単一引用符).恐らくはそれとして解釈される:

(ROWTERMINATOR =
     )

そのときのエコーの内容@bulk_cmd?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top