为什么在 运行 完全隔离时 @@rowcount 等于 1?

Why is @@rowcount equal to 1 when run in complete isolation?

根据 Microsoft @@ROWCOUNT 文档,

Statements that make a simple assignment always set the @@ROWCOUNT value to 1. No rows are sent to the client. Examples of these statements are: SET @local_variable, RETURN, READTEXT, and select without query statements such as SELECT GETDATE() or SELECT 'Generic Text'.

Whosebug 上的其他人也问过 why @@rowcount equals 1 when no rows are updated。但是,该问题使用了更新语句。

我的困惑始于这个例子,其中没有出现其他语句:

进一步阅读(Executing if @@rowcount>0 resets @@rowcount to 0. Why?),然后我进行了第二次测试:

我很想知道为什么在没有使用其他语句时@@rowcount 等于 1? 是因为实际的 SELECT @@ROWCOUNT 语句本身导致更新@@rowcount?

当 运行 SSMS 在 windows 上时,我确实得到了 OP 的行为。通过同时执行输入缓冲区检查和使用探查器,似乎当您打开一个新查询 window 时,ssms 执行以下批处理:

select @@spid;
select SERVERPROPERTY('ProductLevel');

这会产生默认的 A。