我正在嘗試通過 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' );當(dāng)我從 MSSQL Server Management Studio 觸發(fā)它時,它總是完全導(dǎo)入它。當(dāng)我從我的 PHP 代碼執(zhí)行此操作時,有時它會停在中間,沒有任何錯誤消息。我嘗試同時使用 sqlsrv_query 或 sqlsrv_prepare/sqlsrv_execute,結(jié)果相同。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條經(jīng)驗 獲得超3個贊
問題是關(guān)于語句緩沖區(qū)。當(dāng)我用 sqlsrv_next_result 讀取它時,處理繼續(xù)。
$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";
}
}
- 1 回答
- 0 關(guān)注
- 120 瀏覽
添加回答
舉報
0/150
提交
取消