1

我正在尝试使用 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 中获得了全部内容。

4

0 回答 0