我是SQL Server的新手,请原谅我有点菜鸟。
此处显示的代码返回以下错误:
无法从OLE DB提供程序“ BULK”获得链接服务器“(空)”的所需接口(“ IID_IColumnsInfo”)。
代码:
BULK INSERT testingtable
FROM 'D:\TimeLords\data\db-test-file.csv'
WITH
(FORMAT = 'CSV',
FIELDQUOTE = '"',
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
TABLOCK)
我尝试使用:
ROWTERMINATOR = '0x0a'
和
ROWTERMINATOR = '\r\n'
这是CSV文件:https://gyazo.com/0392b660c97e3cac27f2337993190c69
这是我的SQL表:https://gyazo.com/fbbaf6204df9bb574d8887864cc95ea0
这是完整的SQL查询:https://gyazo.com/ffe020437f07524ce44420bedeebf0d4
我已对StackOverflow进行了筛选,找不到任何有效的解决方案。任何想法将不胜感激。
谢谢
答案 0 :(得分:0)
将FORMAT ='CSV'更改为DATAFILETYPE ='char'
或仅删除FORMAT ='CSV'行,因为您的文件可能不符合RFC 4180。
BULK INSERT testingtable
FROM 'D:\TimeLords\data\db-test-file.csv'
WITH
(FIELDQUOTE = '"',
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
TABLOCK)
此错误对我有用。
答案 1 :(得分:0)
还有另一个潜在的罪魁祸首。我一直在SQL Server 2017 Express中运行BULK INSERT,并且我的语法使用FORMAT ='CSV'和ROWTERMINATOR'\ n'-并且已经工作了好几个月了。
我在另一个系统中添加了一个新列,在该系统中我通常将数据导出为CSV,而当我再次进行批量插入时,该列失败了,因为我的CSV中有一个额外的列未对齐与我的SQL表中的列。 DOH!我只需要在SQL数据库中添加相同的新列,一切就恢复了。我这是一个愚蠢的错误,但也许会对其他人有所帮助。
答案 2 :(得分:0)
旧帖子,但是,嘿,所有知识都可以帮助您。如果您使用CSV其他编码或类型(例如,如果您为Macintosh或UTF-8保存CSV(如在Excel中一样),则与FORMAT ='CSV'不兼容。您可以尝试使用其他选项,例如行终止符='\ r',同时删除FORMAT ='CSV',这对于非基于Windows的CSV文件而言对我来说是成功的。