USE AdventureWorks2012
GO
-- 创建临时表并插入一行数据
CREATE TABLE #TempTable (Col1 VARCHAR(100))
INSERT INTO #TempTable (Col1)
VALUES('Temp Table - Outside Tran');
--查询临时表插入的值
SELECT Col1 AS TempTable_BeforeTransaction
FROM #TempTable;
BEGIN TRAN
-- 插入一行数据
INSERT INTO #TempTable (Col1)
VALUES('Temp Table - Inside Tran');
ROLLBACK
-- 查询临时表中的值
SELECT Col1 AS TempTable_AfterTransaction
FROM #TempTable;
GO
-- 删除临时表
DROP TABLE #TempTable
GO
USE AdventureWorks2012
GO
-- 创建表变量并插入一行数据
DECLARE @TableVar TABLE(Col1 VARCHAR(100))
INSERT INTO @TableVar (Col1)
VALUES('Table Var - Outside Tran');
--查询未开启事务之前数据
SELECT Col1 AS TableVar_BeforeTransaction
FROM @TableVar;
BEGIN TRAN
-- 开启事务并插入一行数据
INSERT INTO @TableVar (Col1)
VALUES('Table Var - Inside Tran');
ROLLBACK
--查询开启事务之后数据
SELECT Col1 AS TableVar_AfterTransaction
FROM @TableVar;
GO
当默认插入一条为 Table Var - Outside Tran 的数据后,我们开启事务插入一条为 Table Var - Inside Tran 的数据,接下来再来进行回滚发现其结果仍为 Table Var - Inside Tran ,至此我们得出结论:表变量不受事务所影响。
USE AdventureWorks2012
GO
DBCC SHRINKFILE('TruncateLog', 1)
BACKUP LOG AdventureWorks2012 WITH TRUNCATE_ONLY
DBCC SHRINKFILE('TruncateLog', 1)
GO
如果在SQL Server 2005下运行上述命令则会出现如下错误:
此时我们应该运行如下查询。
USE [AdventureWorks2012]
GO
ALTER DATABASE [AdventureWorks2012] SET RECOVERY SIMPLE WITH NO_WAIT
DBCC SHRINKFILE(AdventureWorks2012_Log, 1)
ALTER DATABASE [AdventureWorks2012] SET RECOVERY FULL WITH NO_WAIT
GO
此时运行成功将得到如下结果: