如何判断全局临时表的存在与否?(急!)

时间:2021-11-05 04:49:27
需要将数据写入临时表,由于本地临时表,当存储过程退出后会丢失,所以需要建立全局临时表,但开始需要先判断是否存在,如不存在则建立,如存在INSERT。
如何判断用户表的存在,我知道:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[table]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
但我将table改为##a(我新建的全局临时表)时,并不能正确判断,不知全局临时表如何判断有无?请指教!另外,用全局临时表和用用户表有何不同,各有什么优缺点呢?

7 个解决方案

#1


不会,关注

#2


当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表。

所有其它本地临时表在当前会话结束时自动除去。

全局临时表在创建此表的会话结束且其它任务停止对其引用时自动除去。任务与表之间的关联只在单个 Transact-SQL 语句的生存周期内保持。换言之,当创建全局临时表的会话结束时,最后一条引用此表的 Transact-SQL 语句完成后,将自动除去此表。

#3


if object_id('tempdb..##tmp1') is not null 
drop table ##tmp1

#4


if exists (select * from tempdb.dbo.sysobjects 
  where id = object_id(N'tempdb.dbo.临时表名') and
   OBJECTPROPERTY(id, N'IsUserTable') = 1)

#5


create proc temp(@tablename varchar(200))
as 
declare @exec varchar(8000)
set @exec='use tempdb
           if exists(select * from sysobjects 
                                 where id=object_id(''tempdb..'+@tablename+'''))
    print '''+@tablename+'表存在''
      else 
                      print '''+@tablename+'表不存在'''
exec (@exec)

go

--测试
create table #test(id int,name varchar(20))
go
temp '#test'
go
temp '#test1'
-----------
#test表存在 
#test1表不存在


#6


select  object_id('tempdb..##tmp1')

有返回值就说明存在

#7


if object_id('tempdb..#t') is null
begin
 CREATE TABLE #t(id int)
 print 'not exist'
end
else
 print 'exist'

#1


不会,关注

#2


当存储过程完成时,将自动除去在存储过程中创建的本地临时表。由创建表的存储过程执行的所有嵌套存储过程都可以引用此表。但调用创建此表的存储过程的进程无法引用此表。

所有其它本地临时表在当前会话结束时自动除去。

全局临时表在创建此表的会话结束且其它任务停止对其引用时自动除去。任务与表之间的关联只在单个 Transact-SQL 语句的生存周期内保持。换言之,当创建全局临时表的会话结束时,最后一条引用此表的 Transact-SQL 语句完成后,将自动除去此表。

#3


if object_id('tempdb..##tmp1') is not null 
drop table ##tmp1

#4


if exists (select * from tempdb.dbo.sysobjects 
  where id = object_id(N'tempdb.dbo.临时表名') and
   OBJECTPROPERTY(id, N'IsUserTable') = 1)

#5


create proc temp(@tablename varchar(200))
as 
declare @exec varchar(8000)
set @exec='use tempdb
           if exists(select * from sysobjects 
                                 where id=object_id(''tempdb..'+@tablename+'''))
    print '''+@tablename+'表存在''
      else 
                      print '''+@tablename+'表不存在'''
exec (@exec)

go

--测试
create table #test(id int,name varchar(20))
go
temp '#test'
go
temp '#test1'
-----------
#test表存在 
#test1表不存在


#6


select  object_id('tempdb..##tmp1')

有返回值就说明存在

#7


if object_id('tempdb..#t') is null
begin
 CREATE TABLE #t(id int)
 print 'not exist'
end
else
 print 'exist'