我有一个表,里面有id,name,age。(表名: Employee)
id是表中的主键。有一个存储过程,它删除给定名称的条目。因此,在要删除的存储过程中,我首先根据名称选择id。如果名称有效,则执行删除操作。
DECLARE @Id uniqueidentifier
BEGIN TRANSACTION
SELECT TOP 1 @Id=Id FROM Employee WHERE Name=@Name
IF @@ROWCOUNT = 0
BEGIN
ROLLBACK TRANSACTION
RETURN ERROR_NOT_FOUND
END
DELETE FROM EMPLOYEE WHERE Id = @Id
IF @@ROWCOUNT = 0
BEGIN
ROLLBACK TRANSACTION
RETURN ERROR_NOT_FOUND
END
COMMIT TRANSACTION我的问题是,在这种情况下,我是否需要事务。我知道当我们想要原子操作(一组操作应该一起通过/失败)时,我们需要一个事务。
对于上述场景,请评论是否需要事务处理。使用/不使用事务的优缺点是什么?
发布于 2011-04-30 22:05:44
至于你的问题的答案-如果没有这个名字的员工,delete和select都不会改变数据库中的任何东西,因此回滚是不必要的。
现在,如果id是唯一的,而名称不是-按名称选择一个员工是非常危险的,因为您无法真正控制要删除哪个员工(从同名员工中)。看起来这个过程应该将id作为参数,而不是通过名称选择它。
发布于 2011-04-30 21:03:55
在您的示例代码中,这两个ROLLBACK语句实际上都没有回滚任何内容,因为在这两种情况下,您都没有更改数据库中的任何内容。换句话说,不,它们不是必需的。
https://stackoverflow.com/questions/5841562
复制相似问题