我该怎么办?
声明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。
我该如何构建这个?任何帮助将不胜感激。
答案 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