为了账号安全,请及时绑定邮箱和手机立即绑定

PHP sqlsrv BULK INSERT 不完整

PHP sqlsrv BULK INSERT 不完整

PHP
有只小跳蛙 2023-04-28 17:13:44
我正在尝试通过 SQL Server BULK INSERT 功能插入一个大文件(几百万行)。我的 SQL 查询将如下所示: BULK INSERT MY_TABLE FROM '\\myserver\open\myfile.csv' WITH ( firstrow=2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', BATCHSIZE = 50000, ERRORFILE = '\\myserver\open\myfileerror.log'  );当我从 MSSQL Server Management Studio 触发它时,它总是完全导入它。当我从我的 PHP 代码执行此操作时,有时它会停在中间,没有任何错误消息。我尝试同时使用 sqlsrv_query 或 sqlsrv_prepare/sqlsrv_execute,结果相同。sql; //like the query above$statement = sqlsrv_query($connection, $sql);if($statement === false) {    $error = sqlsrv_errors();    $error['sql'] = $sql;    throw new Exception(json_encode($error));}是否可以从 $statement 中获取 MSSQL 的日志,就像我从 MSSQL Studio 中获取的一样?例如(50000 行受影响)。作为解决方法,我已将 BATCHSIZE 增加到 1000000,但这不是真正的解决方案。背景信息: - PHP 7.1.9 - sqlsrv 版本:4.3.0+9904 - sqlsrv.ClientBufferMaxKBSize:10240 - Windows 2012 R2 Server
查看完整描述

1 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

问题是关于语句缓冲区。当我用 sqlsrv_next_result 读取它时,处理继续。


$statement = sqlsrv_query($connection, $sql);

if($statement === false) {

    $error = sqlsrv_errors();

    $error['sql'] = $sql;

    throw new Exception(json_encode($error));

} else if($statement) {

    while($next_result = sqlsrv_next_result($statement)){

        #echo date("Y-m-d H:i:s",time()). " Reading buffer...\n";

    }

}


查看完整回答
反对 回复 2023-04-28
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信