【发布时间】:2022-01-03 22:58:15
【问题描述】:
祝大家新年快乐!
我会定期从从 Web 应用程序下载的 CSV 文件中导入数据。我已经为带有 CSV 文件的本地路径创建了链接服务器 LS_Text。我在存储过程中使用INSERT INTO ... SELECT 查询导入文件内容。
只要我以SA 身份登录SSMS,它就可以正常工作。但是如果我使用 Windows 身份验证登录,我会收到错误
无法初始化 OLE DB 提供者的数据源对象 链接服务器“LS_Text”的“Microsoft.ACE.OLEDB.12.0”。
我计划通过调用存储过程的应用程序导入文件。所以 Windows 身份验证必须起作用。
错误信息是什么意思?如果文件路径不存在,则会产生相同的错误消息。因此,SQL Server 或 OLEDB 提供程序似乎看不到包含 CSV 文件的文件夹。但我自己用我的凭证保存了这些文件。
我已经使用以下批次创建了链接服务器:
EXEC sp_addlinkedserver @server = N'LS_Text', @srvproduct=N'CSVFLATFILE',
@provider=N'Microsoft.ACE.OLEDB.12.0', @datasrc=N'C:\Trans', @provstr=N'Text;HDR=Yes';
EXEC sp_addlinkedsrvlogin @rmtsrvname = N'LS_Text', @useself = 'false',
@locallogin = NULL, @rmtuser = NULL, @rmtpassword = NULL;
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1;
据我了解,@useself = 'false', @rmtuser = NULL, @rmtpassword = NULL表示链接服务器无需登录名和密码即可访问。我尝试了各种其他组合,但都没有成功。
在 Google 上找到的有关此错误消息的文章处理的是 OPENROWSET 而不是链接服务器。或者用ACE驱动配置。但这不是问题,因为它是 SA。
那么如何通过 Windows 身份验证查询 CSV 文件?任何提示表示赞赏。
【问题讨论】:
-
为什么要使用链接服务器或不使用
OPENROWSET之类的东西? -
我更喜欢一次性完成所有设置,然后运行一个简单的 INSERT INTO ... SELECT 查询。其他文件和查询可能会随之而来。
-
那既不是这里也不是那里。 SQL Server 可以使用 OPENROWSET 本机加载 CSV 文件。 docs.microsoft.com/en-us/sql/t-sql/functions/… 和
Microsoft.ACE.OLEDB.12.0是 Office 桌面驱动程序,不支持没有本地桌面会话的场景。 -
您想使用
INSERT INTO...SELECT并没有说明您为什么要使用链接服务器,也没有说明您不想使用OPENROWSET。 -
@David Browne 和 Larnu 好的,我知道我必须使用 OPENROWSET。感谢您的回复。
标签: sql-server csv linked-server