早些時候,我創造了這個存儲過程:在插入前檢查重複項時是否需要事務?
Create Procedure CreateEmployee
(
@Role_ID Int,
@FirstName Varchar(50),
@LastName Varchar(50),
@DateOfBirth Varchar(50),
@Active Bit
)
As
Begin
If Not Exists (Select FirstName, LastName, DateOfBirth
From Employee Where FirstName = @FirstName
AND LastName = @LastName
AND DateOfBirth = @DateOfBirth)
Begin
Insert Into Employee (Role_ID, FirstName, LastName, DateOfBirth, Active)
Values (@Role_ID, @FirstName, @LastName, @DateOfBirth, @Active)
End
Else
Begin
Select 'User already exists!'
End
End
這個程序會檢查員工不已經在僱員表中存在執行插入之前。
看起來足以證明防彈,因爲它是在發生任何表改變之前完成的單個條件檢查。然而,在對交易進行一些閱讀之後,我想知道是否應該讓我所有的程序交易獲得額外的保護。
tl dr;有沒有什麼時候你不應該使用交易?
與唯一性相關,如果非活動員工再次加入,上述SQL不會更改活動列。 – 2013-02-11 12:42:46