因爲我知道行的預期數量必須由更新的影響,刪除或插入語句一些SQL查詢一定次數或範圍。這可能是一個數字,如1或一個範圍,如0-1或1-2等如何執行受影響的行的SQL Server或ASP.NET C#
什麼是強制執行,這是受影響的行數,否則拋出一個異常的最好方法?
而且,我可以限制影響了UPDATE/DELETE/INSERT說1行,否則會得到一個異常的行數?
感謝
因爲我知道行的預期數量必須由更新的影響,刪除或插入語句一些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來提出適當的錯誤。