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