MS SQL 我有一个程序 CM_ Export 将记录插入表格。 当我直接从 SQL 管理工作室( < code> EXEC dbo. CM_Export DB1, DB2, 1 ) 运行时, 它插入了 80 行。 但是当我从网络运行时, 它只插入 20 行。 在两种情况下, 它都需要一秒。 在网络中, 我尝试了两种方式 :
(1)(1)
$sql = "EXEC dbo.CM_Export DB1 , DB2 , 1";
sqlsrv_query($conn, $sql);
2) 2)
$tsql = "{call CM_Export(?, ?, ?)}";
$params = array(array("DB1", SQLSRV_PARAM_IN),
array("DB2", SQLSRV_PARAM_IN),
array(1, SQLSRV_PARAM_IN)
);
$stmt = sqlsrv_prepare($conn, $tsql, $params);
if($stmt) {
echo "Statement prepared.
";
} else {
echo "Error in preparing statement.
";
die( print_r( sqlsrv_errors(), true));
}
if(sqlsrv_execute($stmt)) {
echo "Statement executed.
";
} else {
echo "Error in executing statement.
";
die(print_r(sqlsrv_errors(), true));
}
sqlsrv_free_stmt($stmt);
没有错误 。 我尝试在剖析器中捕捉什么运行, 当我把它复制到管理工作室时, 程序会插入80行, 从 Web 插入 20 插入 80 行 。 当我添加到存储程序 TRANSLATO 时, 所以从 Web 中运行不会添加行 。 但是没有错误 - 从管理工作室运行是确定 。 我还尝试追踪, 并且有 :
Exit SQLExecDirectW 具有返回代码 0 (SQL_ SSCOSS)
当我做多次刷新时( Ctrl + R, 不在程序中 TRANSLATORS 中), 所以从前 20 行程序 中添加其他行, 我就可以创建大约 40 行。 所以问题似乎在某个超时中。 但是在脚本中添加超时参数没有效果 。
sqlsrv_query($conn, $sql, array(), array( QueryTimeout => 100))
在追踪记录中,我还发现:
WWHAR * 0x50418B34 [-3]
使用 SQL的 ODBC 驱动程序有问题。 我使用 SQL 2008 R2 64b。