SQL 服务器批量插入错误

SQL server bulkinsert errors

当我 运行 此查询使用用户名和密码(不是 Windows 身份验证)将共享驱动器上的文件批量插入到 SQL 服务器 2008 时,我收到这些错误。 DBA、系统管理员和网络人员都否认这些错误与他们的团队有关,我迷路了……谁能帮我确定问题出在哪里?当我 运行 使用数据库用户名和密码批量插入时,SQL 服务器使用什么身份验证来打开文件?

运行 这在 MS Management Studio 上

BULK INSERT DatabaseName.dbo.TableName
FROM '\shared_server\parent\child\file_name.txt' 
WITH(FIRE_TRIGGERS, DATAFILETYPE='char', FIELDTERMINATOR='\t',ROWTERMINATOR='\n', FIRSTROW=2);

然后我得到

Cannot bulk load because the file  "\shared_server\parent\child\file_name.txt" could not be opened. Operating system error code 5(Access is denied.).

运行 这个在 python

import pyodbc

database = 'DatabaseName'
username = 'username'
password = 'password'
server = 'server_name'
failover = 'failover_server_name'
cnxn_string = 'DRIVER={SQL Server Native Client 10.0};SERVER=%s;FAILOVER_PARTNER=%s;DATABASE=%s;UID=%s;PWD=%s;CHARSET=UTF8' % (server, failover, database, username, password)
cnxn = pyodbc.connect(cnxn_string)
cursor = cnxn.cursor()

query = r"""
BULK INSERT Estimates.dbo.FundamentalsIS 
FROM '\shared_server\parent\child\file_name.txt' 
WITH(FIRE_TRIGGERS, DATAFILETYPE='char', FIELDTERMINATOR='\t',ROWTERMINATOR='\n', FIRSTROW=2);
"""
cursor.execute(query)
cursor.commit()"

然后我得到

ProgrammingError: ('42000', '[42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]Cannot bulk load because the file "\shared_server\parent\child\file_name.txt" could not be opened. Operating system error code 1326(Logon failure: unknown user name or bad password.). (4861) (SQLExecDirectW)')

MS SQL server 2008 是否可能与文件所在的共享驱动器位于不同的安全组(或具有不同的设置)?

因为批量插入操作是在 MS Management Studio 服务器端 运行,它可能无法访问该文件,'access denied' 让我相信数据库服务器无法访问共享文件驱动器,并且可能没有访问它的权限。同样,即使使用 python 执行 BULK INSERT 语句,数据库服务器仍然需要访问文件所在的位置。

我过去遇到过类似的问题,因为数据库服务器无法访问位于其他地方的共享文件。我的解决方法是使用本地计算机读取文件并使用 python 运行 插入查询。听起来本地环境可以访问这两者,并且可以用作中央通信枢纽。您可能必须执行类似于

的操作