2011-02-17 86 views
1

因爲我知道行的預期數量必須由更新的影響,刪除或插入語句一些SQL查詢一定次數或範圍。這可能是一個數字,如1或一個範圍,如0-1或1-2等如何執行受影響的行的SQL Server或ASP.NET C#

什麼是強制執行,這是受影響的行數,否則拋出一個異常的最好方法?

而且,我可以限制影響了UPDATE/DELETE/INSERT說1行,否則會得到一個異常的行數?

感謝

回答

2

對於UPDATE,INSERT和DELETE語句,返回的ExecuteNonQuery受該命令影響的行數。

我建議你在事務中包裝調用,並且如果結果不如預期的那樣回滾事務並拋出異常。

您還可以使用@@ROWCOUNT做同樣的查詢中。

2

使用@@ROWCOUNT直接您的聲明後。如果不等於你想要的,使用RAISERROR

一個小小的警告,但是,RAISERROR都有一個嚴重的參數。使用11和19之間的數字。低於11會被視爲警告。高於19只能由系統管理員完成,是一個致命錯誤並終止您的連接。

3

您可以插入,更新使用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 
0

我想在查詢級別,使用的是要麼@@的程序或類似的內ROWCOUNT之外,但你需要使用事務。

如果你想在數據庫中稍微低一點(因爲上面的技術只能保護設計使用這樣的框架的查詢),那麼你可以使用表格上的觸發器並計算INSERTED或DELETED僞 - 表並使用RAISERRROR來提出適當的錯誤。