【问题标题】:bulk insert working in ssms but not working while executing from php批量插入在 ssms 中工作,但在从 php 执行时不起作用
【发布时间】:2019-02-11 16:52:47
【问题描述】:

我正在尝试将文本文件中的数据插入到我的数据库中。我正在使用 SQL Server Management Studio 17。

我正在使用这个查询:

BULK INSERT db.[dbo].[mytable]
    FROM 'path/file.txt'
    WITH 
        (FIELDTERMINATOR = ';',
         ROWTERMINATOR = '\n') 

问题是它在 SQL Server Management Studio 中工作,但是当我尝试执行此 php 脚本时,即使我在执行此操作后授予用户批量权限,它也会显示错误:

You do not have permission to use the bulk load statement

错误:

Array ( [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) );

?>

【问题讨论】:

  • 我建议用户没有正确的权限。试试ALTER SERVER ROLE bulkadmin ADD MEMBER {Your PHP SQL Login};(显然替换大括号中的文字({}))。

标签: php sql-server


【解决方案1】:

您的 PHP 应用程序使用的帐户需要此权限:

GRANT ADMINISTER BULK OPERATIONS TO [server_login]

您的 SSMS 进程似乎使用其他凭据运行,并且他们拥有此类权限。

另一个原因可能是 SQL Server service account 没有足够的读取源文件的权限

【讨论】:

  • 是的,事实证明我正在使用其他凭据。奇怪的是,即使我在 PHP 和 SSMS windows 身份验证中使用,PHP 脚本中的用户也不同于 SSMS。我在error.log中发现了这一点。我认为这是另一个问题。感谢您的帮助。
  • @Morsi.Hamza,你的问题得到解答了吗?如果是这样,请考虑将其标记为此类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
相关资源
最近更新 更多