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 运行 插入查询。听起来本地环境可以访问这两者,并且可以用作中央通信枢纽。您可能必须执行类似于
的操作
当我 运行 此查询使用用户名和密码(不是 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 运行 插入查询。听起来本地环境可以访问这两者,并且可以用作中央通信枢纽。您可能必须执行类似于
的操作