如果发生错误,我可以回滚事务:
CREATE PROCEDURE [dbo].[MySproc]
(
@Param1 [int]
)
AS
BEGIN TRAN
SET NOCOUNT ON;
SELECT @Param1
UPDATE [dbo].[Table1]
SET Col2 = 'something'
WHERE Col1 = @Param1
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RETURN -12
END
...
Table1
但是,如果事务中没有条目Col1 = @Param1
成功提交,这对我不利。我想检查是否Col2 = 'something'
真的完成了。如果不是,则使用特定的返回码回滚。
如果我尝试在@@rowcount
检查后插入检查@@error
,如下所示:
CREATE PROCEDURE [dbo].[MySproc]
(
@Param1 [int]
)
AS
BEGIN TRAN
SET NOCOUNT ON;
SELECT @Param1
UPDATE [dbo].[Table1]
SET Col2 = 'something'
WHERE Col1 = @Param1
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RETURN -12
END
IF @@ROWCOUNT = 0
BEGIN
ROLLBACK TRAN
RETURN -27
END
...
它总是在这一点回滚,因为@@rowcount
评估最后一条语句,所以它总是等于0
.
在这种情况下如何检查@@error
受影响的行数和行数?