为什么MSSQL过程与Management Studio和PHP的调用方式不同?



我有一个主过程,它调用子过程。主过程没有参数,它只调用子过程。(子程序相同,参数不同( 子过程从视图中进行插入和更新。如果我从管理工作室运行一切似乎都很好,3 分钟后我有大约 1000 条消息说"(1 行受影响("。 但是当我从 PHP 调用它时,它会运行大约 1 秒而没有错误,并且只有第一个子过程有效果。如果我删除第一个过程,那么只有第二个过程有效。 PHP 使用与 Management Studio 相同的用户。

如果我从管理工作室运行,一切似乎都很好,3 分钟后我有大约 1000 条消息说"(1 行受影响("。但是当我从 PHP 调用它时,它会运行大约 1 秒而没有错误,并且只有第一个子过程有效果。

在 SSMS 中看到的"(受影响的 1 行("消息是对发送到客户端的消息的响应。 如果客户端未使用这些消息,则可以阻止服务器端执行。

若要尝试在主过程开始时添加 set nocounton,并在 SSMS 中验证行计数消息是否已消失,请执行以下操作:

将 NOCOUNT 设置为 防止将DONE_IN_PROC消息发送到 存储过程中每个语句的客户端。对于存储过程 包含几个不返回太多实际数据的语句, 或者对于包含事务处理 SQL 循环的过程,设置 SET NOCOUNT 到 ON 可以提供显著的性能提升,因为网络 流量大大减少。

最新更新