为什么在 运行 完全隔离时 @@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。
根据 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。