我正在尝试使用 PHP 和 PDO 运行存储过程,但遇到了一个问题,即并非 SP 中的所有语句都运行。对于我的示例,我尝试执行 320 条简单的插入语句,而 PDO 仅通过其中的 317 条。
这是SP:
CREATE PROCEDURE TestSP
AS
BEGIN
insert into TestTable values (1)
-- ~314 rows later...
insert into TestTable values (316)
insert into TestTable values (317)
-- PDO stops here
insert into TestTable values (318)
insert into TestTable values (319)
insert into TestTable values (320)
END
这是PHP代码:
$connection = new PDO(
"sqlsrv:server=localhost ; Database=TestDb",
"username",
"password"
);
$stmt = $connection->prepare('EXEC TestSP');
$stmt->execute();
当我使用 MSSQL 连接运行相同的 EXEC 语句时,整个 SP 都会运行。
有谁知道这里发生了什么?如果我需要提供更多信息,请提出问题。
仅供参考,我确实尝试过“调用 TestSP”,但它根本不起作用。
编辑:尝试了一个带有循环的脚本(我对使用 SQL 编写脚本很陌生)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF EXISTS (SELECT *
FROM sys.objects
WHERE object_id = Object_id(N'TestSP')
AND type IN ( N'P', N'PC' ))
DROP PROCEDURE TestSP
GO
CREATE PROCEDURE TestSP
AS
BEGIN
DECLARE
@counter int
SET @counter = 1
WHILE (@counter <= 500)
BEGIN
insert into TestTable values (@counter)
set @counter = @counter + 1
END
END
GO
使它更容易测试。有趣的是,我只从 PDO 中获得了 108 行,仍然从 MSSQL 中获得了全部内容。