为什么MSSQL过程的行为与Management Studio和PHP不同?

问题描述 投票:1回答:1

我有一个主过程,它调用子过程。主过程没有参数,只调用子过程。 (子过程在不同的参数下是相同的)子过程从视图进行插入和更新。如果我从Management Studio运行,一切似乎都很好,三分钟后,我有大约1000条消息说“(受影响的1行)”。但是,当我从PHP调用它时,它运行了大约1秒钟而没有错误,并且只有第一个子过程才起作用。如果删除第一个过程,则只有第二个过程才有效。PHP使用与Management Studio相同的用户。

php sql-server tsql stored-procedures moodle
1个回答
0
投票

如果我从Management Studio运行,一切似乎都很好,三分钟后,我有大约1000条消息说:“((1行受影响))”。但是,当我从PHP调用它时,它运行了大约1秒钟而没有任何错误,并且只有第一个子过程才有效。

您在SSMS中看到的'((1行受影响)'消息是对发送给客户端的message的响应。如果客户端不使用这些消息,则它可能阻止服务器端执行。

要在主过程开始时添加set nocount on,并在SSMS中验证行计数消息已消失:

SET NOCOUNT ON阻止将DONE_IN_PROC消息发送到客户在存储过程中的每个语句。对于存储过程包含多个不会返回大量实际数据的语句,或对于包含Transact-SQL循环的过程,设置SET NOCOUNT设置为ON可以显着提高性能,因为网络流量大大减少。

© www.soinside.com 2019 - 2024. All rights reserved.