为特定计数设置行数?
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
和 运行 结束它
我有一个 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
.
select count(*) from MyTable
和 运行 结束它