Temp表用于两个不同的事务

时间:2017-02-14 15:28:48

标签: tsql sql-server-2012 transactions

我有以下T-SQL代码包:

begin tran

  select top 100 *
   into #t 
  from tableA

rollback tran

begin tran

  if OBJECT_ID('tempdb..#t')is not null
    drop table #t

  select top 100 *
   into #t 
  from tableA

rollback tran

当我尝试执行此代码时,我收到以下错误:

数据库中已有一个名为“#t”的对象。

似乎在第二个事务开始时检查找不到与表varieble #t 绑定的objectId。

我期待的是#t将被删除然后重新创建。为什么不丢弃相同的变量然后我在第二个事务中找回错误?

谢谢

1 个答案:

答案 0 :(得分:0)

首先,临时表和表变量之间存在差异!如果只处理很少的数据,请尝试声明一个表变量并用数据填充它。 此外,尝试把

if OBJECT_ID('tempdb..#t')is not null
  drop table #t

在第一个SELECT INTO之前 - 这可能会解决问题......