为特定计数设置行数?

Set rowcount for specific count?

我有一个 stored procedure 看起来像这样:

create procedure usp_FilTable
( 
    @Today datetime
)
as 

truncate table MyTable;

insert into MyTable (col1, col2)
select col1, col2 from MyTableStaging

delete from MyTable where ReportDate <> @Today

Update MyTable set Col1 = 'Sale' where Col2 = 'Salesman'


/* set ROWCOUNT = count(*) from MyTable */

我这样称呼它:

int rows = SqlHelper.ExecuteNonQuery(connString, CommandType.Text, query);

rowcount 计算受 SP 影响的所有行,因此变量 rows 将始终不正确。

如何将 rowcount 设置为 count(*) from MyTable

我想建议一种不同的 SQL 方法,而不是插入、删除然后更新某些行:

create procedure usp_FilTable
( 
    @Today datetime -- Are you sure this should be a dateTime value, not just a Date?
)
as 

truncate table MyTable;

insert into MyTable (col1, col2)
select iif(Col2 = 'Salesman', 'Sale', col1), col2 
from MyTableStaging
where ReportDate <> @Today

这将与单个查询产生相同的效果 - 使其速度更快,可读性更高。

关于您的实际问题: ExecuteNonQuery 的 return 值应该 return 受影响的行数,但如果我没记错的话,在多语句过程的情况下它 returns 的数量受最后一条语句影响的行数。
SET ROWCOUNT 语句与您的想法有不同的效果 - 它限制了 return 从 select 语句编辑的行数(在当前版本中,它还影响插入、更新和删除声明,但这将会改变)。

您始终可以将输出参数添加到存储过程,或者只需使用 ExecuteScalar.

在 c# 中以 select count(*) from MyTable 和 运行 结束它