sqlserver中判断表或临时表是否存在

转自 http://www.cnblogs.com/yugen/archive/2010/07/25/1784749.html

1、判断数据表是否存在

  方法一:

use yourdb;
go

if object_id(N'tablename',N'U') is not null
print '存在'
else
print '不存在'


例如:
use fireweb;
go

if object_id(N'TEMP_TBL',N'U') is not null
print '存在'
else
print '不存在'

 

方法二:

USE [实例名]
GO

IF EXISTS  (SELECT  * FROM dbo.SysObjects WHERE ID = object_id(N'[表名]') AND OBJECTPROPERTY(ID, 'IsTable') = 1)
PRINT '存在'
ELSE
PRINT'不存在'


例如:
use fireweb;
go

IF EXISTS  (SELECT  * FROM dbo.SysObjects WHERE ID = object_id(N'TEMP_TBL') AND OBJECTPROPERTY(ID, 'IsTable') = 1)
PRINT '存在'
ELSE
PRINT'不存在'

2、临时表是否存在:

方法一:
use fireweb;
go

if exists(select * from tempdb..sysobjects where id=object_id('tempdb..##TEMP_TBL'))
PRINT '存在'
ELSE
PRINT'不存在'


方法二:
use fireweb;
go

if exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#TEMP_TBL') and type='U')
PRINT '存在'
ELSE
PRINT'不存在'

 

方法三:

if not exists (select 1 from tempdb.sys.tables where name like '#t%'
begin 
create table #t (int
end
 

我们在写sql 脚本的时候经常会用到临时表,有时间也需要根据临时表是否存在做一些逻辑处理。还好sql server已经集成了一个Object_ID的函数,能够判断是否创建了临时表。使用挺方便的。

  OBJECT_ID 参数:
  'object_name'
  要使用的对象。object_name 的数据类型为 varchar 或 nvarchar。如果 object_name 的数据类型为 varchar,则它将隐式  转换为 nvarchar。可以选择是否指定数据库和架构名称。
  'object_type'
  架构范围的对象类型。object_type 的数据类型为 varchar 或 nvarchar。如果 object_type 的数据类型为 varchar,则它将   隐式转换为 nvarchar。有关对象类型的列表,请参阅 sys.objects (Transact-SQL)中的 type 列。
  第一个Name就是我们创建的临时表的名称如果是临时表需要(tempdb.dbo.#mytemp),第二个type其实可以不用填写。我在使用的时候一般都是给第一个参数,也没深入了解第二个参数
  实例:
  一、判断临时表是否存在,如果存在则删除。
  --创建一个临时表
  CREATE TABLE #mytemptable(
  id INT
  )
  --判断临时表是否存在,存在则删除
  IF OBJECT_ID(N'tempdb.dbo.#mytemptable') ISNOTNULL
  BEGIN
  DROPTABLE#mytemptable
  PRINT 1
  END
  ELSE
  BEGIN
  PRINT 2
  END
  第一次执行结果:1
  第二次执行结果:2
  二、判断临时表是否存在。如果不删除将一直存在。
  --创建一个临时表
  CREATETABLE#mytemptable(id INT)
  --没有删除将一直存在
  IF OBJECT_ID(N'tempdb.dbo.#mytemptable') ISNOTNULL
  BEGIN
  PRINT 1
  END
  ELSE
  BEGIN
  PRINT 2
  END
  执行结果:1
  这个执行结果是在一个查询分析器里面执行的结果,开启一个就会有一个会话存在,如果没有关闭这个会话他将一直存在。
  那么如果这个会话结束了没有手动释放资源,那么临时表是否还会占用空间。

 

posted @ 2014-06-19 14:46  princessd8251  阅读(935)  评论(0)    收藏  举报