如何执行受影响的行的SQL Server或ASP.NET C#
问题描述:
因为我知道行的预期数量必须由更新的影响,删除或插入语句一些SQL查询一定次数或范围。这可能是一个数字,如1或一个范围,如0-1或1-2等如何执行受影响的行的SQL Server或ASP.NET C#
什么是强制执行,这是受影响的行数,否则抛出一个异常的最好方法?
而且,我可以限制影响了UPDATE/DELETE/INSERT说1行,否则会得到一个异常的行数?
感谢
答
对于UPDATE,INSERT和DELETE语句,返回的ExecuteNonQuery受该命令影响的行数。
我建议你在事务中包装调用,并且如果结果不如预期的那样回滚事务并抛出异常。
您还可以使用@@ROWCOUNT做同样的查询中。
答
使用@@ROWCOUNT直接您的声明后。如果不等于你想要的,使用RAISERROR。
一个小小的警告,但是,RAISERROR都有一个严重的参数。使用11和19之间的数字。低于11会被视为警告。高于19只能由系统管理员完成,是一个致命错误并终止您的连接。
答
您可以插入,更新使用TOP和删除强制受影响的行数。这不会引发异常。
declare @T table (id int)
insert top(1) into @T values
(1),
(2),
(3)
如果您想要例外,您可以在事务中使用@@ROWCOUNT
。
declare @Min int = 2
declare @Max int = 3
begin transaction
insert into Table1 values
(1),
(2),
(3),
(4)
if not @@rowcount between @Min and @Max
begin
rollback
-- Throw exception here, RAISERROR()
end
else
begin
commit
end
答
我想在查询级别,使用的是要么@@的程序或类似的内ROWCOUNT之外,但你需要使用事务。
如果你想在数据库中稍微低一点(因为上面的技术只能保护设计使用这样的框架的查询),那么你可以使用表格上的触发器并计算INSERTED或DELETED伪 - 表并使用RAISERRROR来提出适当的错误。