日期:2014-05-18  浏览次数:20533 次

关于存储过程的回滚
1.我写了一个存储过程A,调了一个存储过程B,现在我在A搞个事务,调用了B,然后回滚,是否B做的任何修改都会回滚,不管B里调用了其什么存储过程,嵌套了多少层,都会全部回滚?

2.truncate   table,drop   table是否也可以回滚?

------解决方案--------------------
是的,樓主所說兩種情況都會回滾的
------解决方案--------------------
USE test
GO
CREATE TABLE [dbo].[TRANTEST](
[id] [int] IDENTITY(1,1) NOT NULL,
[Value] [varchar](200) COLLATE Chinese_PRC_CI_AS NOT NULL,
[InDate] [datetime] NULL
) ON [PRIMARY]

INSERT INTO [dbo].[TRANTEST]([Value],[InDate]) VALUES ( '325 ',GETDATE())
INSERT INTO [dbo].[TRANTEST]([Value],[InDate]) VALUES ( '35465 ',GETDATE())
INSERT INTO [dbo].[TRANTEST]([Value],[InDate]) VALUES ( '32435 ',GETDATE())


SELECT * FROM DBO.TRANTEST WITH (NOLOCK)

BEGIN TRAN --事务回滚测试 TRUNCATE TABLE
TRUNCATE TABLE DBO.TRANTEST
SELECT * FROM DBO.TRANTEST WITH (NOLOCK)
ROLLBACK TRAN
SELECT * FROM DBO.TRANTEST WITH (NOLOCK) --回滚成功


BEGIN TRAN--事务回滚测试 DROP TABLE
DROP TABLE DBO.TRANTEST
ROLLBACK TRAN
SELECT * FROM DBO.TRANTEST WITH(NOLOCK)--回滚成功