1

我的 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 论坛上找到任何关于此的信息,我们将不胜感激。

4

1 回答 1

0

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

我想我可以使用一个全局临时表来做同样的事情,但是选择重写 PHP 来分别处理每个命令,在每个命令被尝试之后处理事务、错误和反向引用。我希望那不是真的,但我被告知是真的。

于 2013-09-02T16:25:22.473 回答