早些时候,我创造了这个存储过程:在插入前检查重复项时是否需要事务?
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