首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

T-SQL 判断表是否存汇总在

作者:  时间: 2011-06-01

1,ADO方式下判断数据表是否存在

面构造两个可重载的函数,用于在ADO方式下判断数据库的数据表是否存在。


函数一:
// ------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
Function TableExist( pAdoCmd: TADOCOMMAND; pcTable : string ) : boolean ; overload ;
varcError : string ;
begin
ADO_COMMAND_EXEC( pAdoCmd, 'Select top 1 from ' + pcTable , cError );
result := ( cError = '' );
end ;

函数二:
// ------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
Function TableExist( pConn:TADOConnection; pcTable : string ) : boolean ; overload ;
vartmpFldList : TStrings ;
nLoop : integer ;
begin
Result := False ;
tmpFldList := TStringList.Create ;
pConn.GetTableNames( tmpFldList, True ); // 包含系统表
for nLoop := 0 to tmpFldList.Count - 1 do
begin
if uppercase( tmpFldList[nLoop] ) = uppercase( pcTable ) then
begin
Result := True ;
break ;
end;
end;
tmpFldList.Free ;
end;

2,sql语句式

select * from sysobjects where   name= 表名  and xtype=''u'' '

或者如下更容易看明白:

 

SQL.Add('select   name   from   sysobjects   where   name   =   tmp   and   type=u');  
  open;  
  ...       
  if   ADOQuery.IsEmpty   then  
      ShowMessage('表tmp不存在!');

 

注意:是xtype不是type,

Type是在6.0就有的,XType在7.0才出现:

Type
对象类型。可以是下列值之一:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
FN = 标量函数
IF = 内嵌表函数
K = PRIMARY KEY 或 UNIQUE 约束
L = 日志
P = 存储过程
R = 规则
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
V = 视图
X = 扩展存储过程

XType
对象类型。可以是下列对象类型中的一种:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
L = 日志
FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ = UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程

如果是实表可以用

if exists (select * from sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[表名]--如果表存在就删除

如果是临时表可以用

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