我尝试将数据从多个文本文件导入SQL Server数据库。
我对在所有文件上运行SQL的批处理方面感到满意,但我很难让SQL运行起来。
文本文件的格式为:
UNWANTED TEXT UNWANTED TEXT UNWANTED TEXT
UNWANTED TEXT UNWANTED TEXT UNWANTED TEXT
UNWANTED TEXT UNWANTED TEXT UNWANTED TEXT
Field1,Field2,Field3,Field4
UNWANTED TEXT UNWANTED TEXT UNWANTED TEXT
UNWANTED TEXT UNWANTED TEXT UNWANTED TEXT
UNWANTED TEXT UNWANTED TEXT UNWANTED TEXT
复杂的是文本文件中的字段与表字段的顺序不匹配,我不想导入所有数据。
我的表格如下:
ID (int - autoincrement) | Field3 (nvarchar) | Field1 (datetime) | ImportDate (datetime) | Text from whole text file for reference (nvarchar)
因此,我的要求是将字段3放在表格的第2列中,将字段1放在表格的第3列中。
我的SQL看起来像:
USE FOO_DB
BULK INSERT dbo.BarTable
WITH
(
FORMATFILE = 'C:\format.txt'
FIELDTERMINATOR = ',',
FIRSTROW = 13
)
我的format.txt文件如下:
10.0
5
1 SQLCHAR 0 24 "," 3 Field1 Latin1_General_CI_AS
2 SQLCHAR 0 100 "" 0 ID ""
3 SQLCHAR 0 100 "," 2 Field3 Latin1_General_CI_AS
4 SQLCHAR 0 100 "" 0 ImportDate ""
5 SQLCHAR 0 24 "" 0 FileText ""
尝试导入时,我得到:
0 rows affected
如果我摆弄FIRSTROW值,我偶尔会得到一些:
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 1 (Field 3)
我读到FIRSTROW不是从实际文件的第一行开始计算,而是包含字段分隔符的第一行?如果是这样,我的数据之前唯一有逗号的行是第4行。我的数据在第13行 - 中间没有逗号的行。
如果我删除文本文件中的所有数据,除了我想要的逗号分隔的东西,然后将FIRSTROW调整为1,我得到:
Bulk load: An unexpected end of file was encountered in the data file
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
答案 0 :(得分:1)
将数据导入临时表,然后使用简单的SELECT INTO语句重新排列列,你会好得多。