尝试在SQL Server查询中捕获

时间:2014-08-06 23:31:23

标签: sql sql-server

我该怎么办?

声明1:

UPDATE Members 
SET Count = Count - 1 
WHERE Count > 0;

声明2:

INSERT INTO Sessions (Name, Etc) 
VALUES('Mike', 'Other')

如果语句1和2都成功,则返回新插入的行ID。

SELECT SCOPE_IDENTITY(); 

如果语句1或2失败,我想回滚事务并返回0或-1。

我该如何构建这个?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

SET XACT_ABORT ON

BEGIN TRY

    BEGIN TRANSACTION

    UPDATE [Members]
    SET [Count] = [Count] - 1 WHERE [Count] > 0;

    INSERT INTO [Sessions] ([Name], [Etc])
    VALUES ('Mike', 'Other')

    COMMIT TRANSACTION

END TRY
BEGIN CATCH

    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;

    RETURN 0

END CATCH

SELECT SCOPE_IDENTITY();

以下是相关的MSDN文档:

答案 1 :(得分:1)

您可以执行以下操作

     Begin Try
        Begin tran 
           SQL logic
        Commit tran
     END try
     Begin Catch
        rollback tran            
        return 0 or -1
     end Catch

这显然只是你要求的结构,但你可以到这里获取有关语法的更多信息,以及更多示例http://msdn.microsoft.com/en-us/library/ms175976.aspx