PHP sqlsrv BULK INSERT 不完整
PHP sqlsrv BULK INSERT incomplete
我正在尝试通过 SQL 服务器 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 服务器
问题与语句缓冲区有关。当我用 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";
}
}
我正在尝试通过 SQL 服务器 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 服务器
问题与语句缓冲区有关。当我用 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";
}
}