在PHP中创建的多行批处理命令无法识别我声明的变量

时间:2013-08-26 19:50:27

标签: php sql sql-server

我的php类创建以下命令:

INSERT INTO contacts (firstName, lastName) VALUES ('jon', 'snow') 
DECLARE @IDcontacts VARCHAR(200)
SET @IDcontacts = @@IDENTITY;

INSERT INTO emailAddresses (ownerId, emailAddress) VALUES (@IDcontacts, 'jon@thewall.com') 
INSERT INTO emailAddresses (ownerId, emailAddress) VALUES (@IDcontacts, 'jon@winterfell.com') 

INSERT INTO emailAddresses (ownerId, emailAddress) VALUES (@IDcontacts, 'thebastard@winterfell.com') 

我使用sqlsrv_query()创建连接,开始事务并执行批处理。

执行批处理后,sqlsrv_errors()给了我四个错误:[Microsoft][SQL Native Client][SQL Server]Must declare the scalar variable "@IDcontacts".

但是,如果我在SQL Server Management Studio中使用完全相同的批处理字符串,它可以正常工作,并且所有四个记录都插入了第一个插入的正确标识值。

我正在使用SQL Server Express 2005,php版本5.4.3和最新的sqlsrv驱动程序。我无法在technet或ms论坛上找到任何关于此的信息,任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

实质上,正如在MSDN论坛上对此问题的回答中所述,即使作为单个字符串提交,SQL也不会作为批处理执行。每个命令都由sp_executesql执行,这使得每个命令都在一个单独的范围内运行。

我想我可以使用全局临时表来执行相同的操作,而是选择重写PHP以分别处理每个命令,在尝试每个命令后处理事务,错误和反向引用。我希望这不是真的,但我被告知是。