我使用批量插入来导入rpt文件,但我收到了这些错误:
Msg 4866,Level 16,State 1,Line 1
批量加载失败。第1行第1列的数据文件中的列太长。验证是否正确指定了字段终止符和行终止符。Msg 7399,Level 16,State 1,Line 1
OLE DB提供程序" BULK"对于链接服务器"(null)"报告错误。提供商没有提供有关错误的任何信息。Msg 7330,Level 16,State 2,Line 1
无法从OLE DB提供程序中获取行" BULK"对于链接服务器"(null)"。
我认为这是由于文件列之间的空格,我有什么办法可以修剪这些空格吗?
谢谢!
答案 0 :(得分:1)
如果您的文件中只有空格,您的文件格式是固定的,您需要一个格式文件来加载它。
SELECT *
FROM OPENROWSET(BULK 'C:\Users\Admin\Desktop\Extractions\F0005.rpt',
FORMATFILE='C:\myTestSkipField.fmt'
) AS t1;
我在下面添加了一个示例.fmt
文件,使用EmptyField
列映射文件中的前几个字段以映射空间。您可以省略这一点,因为看起来您必须使用LTRIM(TRIM([column]))
9.0
8
1 SQLCHAR 0 4 "" 1 DRSY SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 1 "" 2 Empty1 SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 4 "" 3 DRTT SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 10 "" 4 DRKY SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 1 "" 5 Empty2 SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 30 "" 6 DRDL01 SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 1 "" 7 Empty3 SQL_Latin1_General_CP1_CI_AS
8 SQLCHAR 0 1024 "\n" 8 Remainder SQL_Latin1_General_CP1_CI_AS
来自Microsoft documentation,这是.fmt
文件的文件格式: