1

これが、CSVファイルをSQL Server 2008に一括ロードするSQLですが、次のように返されます。

0 row(s) affected.

コード:

USE energyDB
GO

BULK INSERT energydata
FROM 'c:\temp\24544_MSSQL_out.csv'
WITH
(
  FIRSTROW = 2,
  FIELDTERMINATOR = ',',
  ROWTERMINATOR = '\n'
)
GO

CSVファイルは次のようになります(一番上の行は無視されます)

24544,"1970-01-01 10:00:00","8056060 kWh"
24544,"2012-12-04 00:15:00",0.176
24544,"2012-12-04 00:30:00",0.163
24544,"2012-12-04 00:45:00",0.016
4

2 に答える 2

0

一括挿入ではデータから引用符は削除されません。インポートするファイルを変更するか、すべての列が文字フィールドであるテーブルにインポートして、クエリで引用符を削除し、データ型を変換する必要があります。次のMSDN記事を見つけました。

http://msdn.microsoft.com/en-us/library/ms188609.aspx

それは述べています:

カンマ区切り値(CSV)ファイルは、SQLServerの一括インポート操作ではサポートされていません。

そして、それが機能する状況のいくつかの例を続けます。

于 2012-12-13T06:29:52.590 に答える
0

この質問は少し古いですが、問題を検索すると表示されたので、解決策を提供すると思いました。

私の場合、正しいテーブルに挿入しなかったという単純な間違いだったので、挿入先のテーブルを確認してください。何が起こっているのかを突き止めようとしたところ、一括挿入プロセスでエラー ファイルを作成して、正しい方向に導くことができることがわかりました。これを行うには、次のようなものを使用できますERRORFILE ='E:\Error.txt'。これにより、受け取ったエラーが Error.txt というファイルに出力されます。以下に完全な例を示します。

BEGIN TRANSACTION
BEGIN TRY
BULK INSERT [Table Name]
FROM 'E:\FileName.csv'
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', ERRORFILE ='E:\Error.txt')
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH

一括挿入プロセスをトランザクションでラップしていることに気付くでしょう。これは、一括挿入中に問題が発生した場合にすべてをロールバックし、部分的なデータ インポートを取得しないようにするためです。

于 2015-04-07T13:51:27.883 に答える