临时表 是否存在

时间:2021-05-04 09:06:42

1.在SQL SERVER中,用select object_id('Tempdb..#TempTable')该语句可判断一个临时表是否已经建立。(已建立返回值为一个整数,未建立则返回Null值)

Tempdb 是表示存临时表的数据库

我们可在建立临时表前先用以下语句判断临时表是否已存在,当已存在时就删除该临时表。

if not (select object_id('Tempdb..#TempTable')) is null drop table #TempTable

eg:if not (select object_id('Tempdb..#1234')) is null drop table #1234  写法更简单  三种功能是一样的

   IF Exists (select * from tempdb.dbo.sysobjects where id=object_id(N'Tempdb..#1234')) drop table #1234

   IF Exists (select * from tempdb..sysobjects where id=object_id(N'Tempdb..#1234')) EXECUTE('DROP TABLE #1234')

2.临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。

本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。

全局临时表的名称以两个数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。

3.永久表 id = object_id(N'[dbo].[DH_SJMT]')

  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DH_SJMT]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[DH_SJMT]

4.  select * from dbo.sysobjects 查询永久表 名称。name/id/xtype 一般用户创建的 xtype='U'

    select [name] from tempdb..sysobjects 查询临时表 名称。name/id/xtype 一般用户创建的 xtype='U'

 

 

5。案例分析

 

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tempkh]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [dbo].[tempkh]

GO

//系统自带的脚步语句 导出

CREATE TABLE [dbo].[tempkh] (

[stypeno] [varchar] (15) COLLATE Chinese_PRC_CI_AS NULL ,

[colorid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL 

) ON [PRIMARY]

GO

//功能相同 判断是否存在 

if exists (select * from dbo.sysobjects where objectproperty(object_id(N'[dbo].[tempkh]'), N'IsUserTable') = 1)   --'istable') = 1)

drop table [dbo].[tempkh]

go