大容量插入在ssms中工作,但从php执行时不工作
我正在尝试将文本文件中的数据插入数据库。我正在使用SQLServerManagementStudio 17 我正在使用此查询:大容量插入在ssms中工作,但从php执行时不工作,php,sql-server,Php,Sql Server,我正在尝试将文本文件中的数据插入数据库。我正在使用SQLServerManagementStudio 17 我正在使用此查询: BULK INSERT db.[dbo].[mytable] FROM 'path/file.txt' WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n') 问题在于,它在SQL Server Management Studio中工作,但当我尝试执行此php脚本时,它
BULK INSERT db.[dbo].[mytable]
FROM 'path/file.txt'
WITH
(FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n')
问题在于,它在SQL Server Management Studio中工作,但当我尝试执行此php脚本时,它显示了一个错误,尽管我在执行以下操作后授予了用户批量的权限:
错误:
数组([0]=>Array([0]=>42000[SQLSTATE]=>42000[1]=>4834[code]=>4834[2]=>[Microsoft][SQL Server Native Client 11.0][SQL Server]您没有使用批量加载语句的权限。[消息]=>[Microsoft][SQL Server Native Client 11.0][SQL Server]您没有使用批量加载语句的权限。)
我正在使用的代码
<?php
$serverName = "SQLEXPRESS";
$connectionInfo = array( "Database"=>"master");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "Connection established.<br />";
}else{
echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));
}
$query1 = "BULK INSERT db.[dbo].[mytable]
FROM 'path/file.txt'
WITH
(FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n')";
$result1 = sqlsrv_query($conn,$query1) or die( print_r(sqlsrv_errors(), true) );
?>
PHP应用程序使用的帐户需要此权限:
GRANT ADMINISTER BULK OPERATIONS TO [server_login]
您的SSMS进程似乎是使用其他凭据运行的,并且它们具有这样的权限
另一个原因可能是,如果SQL Server
服务帐户
没有足够的权限来读取源文件,我建议用户没有正确的权限。尝试alterserver角色bulkadmin添加成员{您的PHP SQL登录名}
(显然替换大括号中的文本({}
)。是的,原来我在使用其他凭据。奇怪的是,即使我在PHP和SSMS中使用windows身份验证,PHP脚本中的用户也不同于SSMS。我在error.log中发现了这一点。我认为这是另一个问题。谢谢你的帮助。@Morsi.Hamza,你的问题有答案吗?如果是这样,考虑把它标记为这样的一个。