通过网络批量插入


13

有人可以帮我这些吗?

BULK INSERT DATABESE01.dbo.TABLE01
FROM '\\COMPUTER01\FOLDER01\TextFile.txt'
WITH
(
    FIELDTERMINATOR = ' ',
    rowterminator = '\n',
    tablock
)

错误显示,无法打开:

无法批量插入,因为无法打开文件“ \ SERVERNAME \ FOLDERNAME \ textFile.txt”。操作系统错误代码5(访问被拒绝。)

该路径在网络上的另一台计算机上。


8
运行SQL Server 的帐户是否具有访问权限'\\COMPUTER01\FOLDER01\TextFile.txt'?请注意,该帐户通常与您的帐户不同。
Damien_The_Unbeliever

3
您还可以添加得到的确切错误吗?
ypercubeᵀᴹ

除了@Damien_The_Unbeliever:“要指定共享数据文件,请使用通用命名约定(UNC)名称,其通用格式为\\ Servername \ Sharename \ Path \ Filename”
JoseTeixeira 2013年

@ypercube-无法批量插入,因为无法打开文件'\\ SERVERNAME \ FOLDERNAME \ textFile.txt'。操作系统错误代码5(访问被拒绝。)。谢谢您,先生
乔纳斯·艾维五世

使用相同的域和跨域存在相同的问题(操作系统错误代码5(访问被拒绝。))。有趣的是,如果我使用XP_CMDSHELL来测试文件是否存在,或者我什至可以移动文件,但是大容量插入会导致访问被拒绝。sql服务帐户和我的Windows帐户均具有该文件夹的权限。

Answers:


14

我将迈出第一步,并假设您使用Windows身份验证连接到SQL Server。在这种情况下,您有一个Kerberos双重跃点:一个跃点是您的客户端应用程序连接到SQL Server,第二个跃点是SQL Server连接到远程服务器\\COMPUTER01。这样的两次跳转受约束委派的限制,您最终将以匿名登录的身份访问共享,从而导致访问被拒绝。

若要解决此问题,您需要为SQL Server服务帐户启用约束委派。该博客的方法:带约束委派的SQL Server批量插入(访问被拒绝)提供了一个示例,我确实希望实现“启用无约束委派”的步骤只是一个错字,因为无约束委派是简直就是邪恶。

如果我开枪,而您正在使用SQL身份验证登录SQL Server,则需要为SQL登录创建凭据,并使用该凭据访问网络资源。请参阅CREATE CREDENTIAL


1

Sql Server试图打开文件,文件服务器告诉它“访问被拒绝”,因为SQL Server运行的帐户没有打开文件的权限。相应地更改文件的安全设置,它将起作用。


1

我将在SQL登录名(具有bulkadmin权限)下运行脚本,并根据SQL服务帐户或SQL Server代理帐户对网络文件夹上的权限进行身份验证。


-2

每当我收到此消息时,我都会告诉您什么对我有用。我在记事本中将csv文件作为文本打开,并删除了文件中的所有空格行,我在excel文件中看不到那些空白行。通常,即使它为空,它也只是出现的最后一行


您确定这是相同的错误吗?
dezso 2015年

这与“访问被拒绝”错误无关。这只能修复文件格式错误。
朱利安·瓦瓦瑟
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.