Chi*_*isu 22 t-sql transactions try-catch
关于如何使用交易有很多很多问题.我想知道的是何时?在什么情况下?什么类型的查询?Try-Catch块可以代替吗?等等...
我设计了一个包含~20个表和~20个存储过程的数据库.目前我的SP中没有一个使用事务,但整个过程中有许多Try-Catch块.原因是因为每当我试图将它们包装在一个事务中时,SP就会停止运行,我最终会丢失数据并且比我使用Trans更糟糕.
再说......
这是我为重命名产品而写的一个小样本SP:
CREATE PROCEDURE spRenameProduct
@pKey int = NULL,
@pName varchar(50)
AS
BEGIN
BEGIN TRY
IF LTRIM(RTRIM(@pName)) = '' SET @pName = NULL
IF NOT @pKey IS NULL AND NOT @pName IS NULL BEGIN
declare @pKeyExisting int = (select MIN(ID) from rProduct where Product like @pName and not ID = @pKey)
IF @pKeyExisting is null BEGIN
update rProduct set IsValid = 1, Product = @pName where ID = @pKey
END ELSE BEGIN
update Request set ProductID = @pKeyExisting where ProductID = @pKey
update StatusReport set ProductID = @pKeyExisting where ProductID = @pKey
delete from rProduct where ID = @pKey
END
END
END TRY BEGIN CATCH END CATCH
END
Run Code Online (Sandbox Code Playgroud)
现在如果两个人在同一时间使用它会怎么样?我真的不想,也没有时间(不幸的是),想要开心.在这种情况下,KISS是最好的.:)