2013-10-31 35 views
1

我正在使用PHP 5.5并连接到MS SQL数据库。连接按预期工作。我试图做一个质量插入(大约2000行)。而不是使用PHP运行2000 INSERT语句,我送一个查询,像这样:PHP和SQLSRV没有插入它应该的所有行

DECLARE @count INT 
SET @count = 0 
WHILE(@count < 2000) 
BEGIN 
INSERT INTO Table (Field1, Field2) 
VALUES ('data1', 'data2') 
SET @count = (@count + 1) 
END 

当我直接插入此查询到SQL Server管理CHINESE工作室,它插入2000行预期。当我通过PHP运行查询,像这样:

$connectInfo = array ("UID"=>'user',"PWD"=>'@pass',"Database"=>"database", "ReturnDatesAsStrings"=>true); 
$link = sqlsrv_connect("dataserver",$connectInfo); 

$query = "DECLARE @count INT 
SET @count = 0 
WHILE(@count < 2000) 
BEGIN 
INSERT INTO License (Field1, Field2) 
VALUES('data1','data2') 
SET @count = (@count + 1) 
END"; 

if(!$foo = sqlsrv_query($link,$query)) { 
    die(print_r(sqlsrv_errors(), true)); 
}else{ 
    die("hooray beer time!"); 
} 

这只是插入表中的524行,而不是预期的2000(有的时候是309行,X行,其飘忽不定)。它不会出错,我会得到“万岁啤酒时间!”在每个脚本运行之后。默认情况下,sqlsrv_query()函数没有时间限制,我想。有没有人遇到过这样的事情?这让我感到困惑。

+0

这是有效的sql。如果是连接/命令超时或缓冲区大小问题,您将收到一个异常。我会先创建一个测试存储过程并粘贴你的sql。然后将你的内联sql更改为“EXEC TEST_PROC”并查看是否有任何区别:( –

回答

1

啊,看来在While循环中的每一个插入之后,SQL都会返回一行文本,说明(1)行受到影响(或者是那个调整的东西)。关闭此通过:

SET NOCOUNT ON 

已解决此问题。谢谢大家!