`
lzh166
  • 浏览: 293806 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

创建表之前判断表是否存在,如果存在则删除已有表

阅读更多

在sqlserver中,创建表之前判断表是否存在,如果存在则删除已有表

----SQL-Server 
if exists (select 1
            from  sysobjects
           where  id = object_id('EMP')
            and   type = 'U')
   drop table S_Evaluate
go

--CREATE Table: EMP 
create table EMP(
   Id                   numeric          identity, -- 评估ID
   Conclusion            text                null --结论
 constraint PK_S_EMP primary key nonclustered(Id)
)
go

 ORACLE 数据库

但是在oracle中却没有。如果直接使用drop table那么如果表不存在会报错,导致后续语句无法运行。因此可以通过一个存储过来来进行判断。
主要是查询all_tables表的TABLE_NAME和OWNER,如果表存在,则执行execute immediate 'drop table TABLE_NAME'; 

--判断表是否存在,如果存在则删除 
declare 
      num   number; 
begin 
      select count(1) into num from all_tables where TABLE_NAME = 'EMP' and OWNER='SCOTT'; 
      if   num=1   then 
          execute immediate 'drop table EMP'; 
      end   if; 
end; 
/ 
--创建表 
CREATE TABLE EMP 
       (EMPNO NUMBER(4) NOT NULL, 
        ENAME VARCHAR2(10), 
        JOB VARCHAR2(9), 
        MGR NUMBER(4), 
        HIREDATE DATE, 
        SAL NUMBER(7, 2), 
        COMM NUMBER(7, 2), 
        DEPTNO NUMBER(2)); 

 
 现在使用DB2,网上找了很久也没个好方法,基本上用简单的sql语句来实现是不大可能的,能找到的方法都是自己写存储过程实现
删除表的如下:

CREATE PROCEDURE ExistsTest(IN TableName varchar(50),OUT iReturn int)
LANGUAGE SQL  
P1: BEGIN  
  DECLARE stmt VARCHAR(200);
  IF EXISTS (select * from sysibm.systables where TID <> 0 and name = TableName ) THEN
  set stmt ='drop table '|| TableName;  
  PREPARE s1 FROM stmt;
  EXECUTE s1;
  set iReturn =0;
  else
  set iReturn =-1;
  END IF;  
END P1@  

 
END P1后面的@根据所用编辑工具的不同,默认的结束也不一样。测试了一下QUEST CENTRAL FOR DB2,默认是分号,如果想用@自己修改工具的配置吧
由于DB2不像sqlserver那样把所有对象组织到一个sysobjects里,所以想要实现不同的功能就需要修改这个存储过程,
如:
syscat.procedures 存储过程
syscat.tables  表
sysibm.tables  表
syscat.views 视图
sysibm.views 视图
以上表和视图的系统视图在syscat和sysibm里都存在,个人水平不高,不知道是为什么,呵呵,从网上搜到的信息里摘一段出来如下:
     数据库的视图里有sysibm.tables和syscat.tables,这两个有什么区别?很多资料上不是说sysibm模式的是基表吗,怎么在视图里也有sysibm模式,是干什么用的?gmx平坦软件园

sysibm.tables的表里面的信息比syscat.tables的少,或者说IBM认为你想知道的信息在sysibm.tables里面已经都可以知道了,这个应该是给用户使用的。syscat.tables应该是给系统使用的。gmx平坦软件园

分享到:
评论

相关推荐

    [详细完整版]12数据库.doc

    要求在 创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出"已删除!" 信息,否则就给出"不存在,可创建!"的信息。 b) 创建一个名为t_student_t_score的存储过程:可查询出某学号段的同学的学号...

    DbTool:数据库工具,根据表结构文档生成创建表sql,根据数据库表信息导出Model和表结构文档,根据文档生成数据库表,根据已有Model文件生成创建数据库表sql

    可以导出到Excel,可以根据Excel字段文档生成Sql,数据库表误删除又没有备份的时候就很有帮助了,而且支持反向的根据生成的Model去生成创建数据库表的Sql。 注:暂时不支持索引及外键等需要关联另外一张表的数据关系...

    VBA与数据库

    1-4 在已有的数据库中创建数据表(DAO) 10 1-5 在已有的数据库中创建数据表(ADOX) 12 1-6 在已有的数据库中创建数据表(SQL,Command对象) 13 1-7 在已有的数据库中创建数据表(SQL,Recordset对象) 13 1-8 ...

    Excel VBA与数据库整合应用范例精讲

    实例1-13 利用已有的数据表创建新数据表(ADO) 实例1-14 利用已有的数据表创建新数据表(DAO) 实例1-15 利用已有的数据表创建新数据表(Access) 第2章 获取Access数据库信息 实例2-1 检查数据表是否存在...

    Excel VBA与数据库整合应用范例精讲书及源代码

    实例1-13 利用已有的数据表创建新数据表(ADO) 实例1-14 利用已有的数据表创建新数据表(DAO) 实例1-15 利用已有的数据表创建新数据表(Access) 第2章 获取Access数据库信息 实例2-1 检查数据表是否存在...

    Excel VBA实用技巧大全 附书源码

    03018判断工作表是否存在(之一) 03019判断工作表是否存在(之二) 03020判断工作表是否自动重新计算 03021判断工作表被保护时是否可以进行自动筛选的操作 03022判断工作表被保护时是否启用分级显示符号 03023判断...

    Android开发人员不得不收集的代码

    createFileByDeleteOldFile : 判断文件是否存在,存在则在创建之前删除 copyDir : 复制目录 copyFile : 复制文件 moveDir : 移动目录 moveFile : 移动文件 deleteDir : 删除目录 deleteFile : 删除文件 ...

    申请单管理系统

    如果已经填写,则判断输入的部门名称在部门表中是否已经存在,如果存在,则不能新增,并给出提示“该部门名称已经存在!”;如果不存在,则新增部门。如果新增成功,则弹出提示“新建成功!”,并关闭该模态窗口,...

    Excel新增工具集

    6、比较两表人员差异追加列记录:其效果是向已有表中增加新表中的人员(行数据)和表中所有人员的新增信息(列数据),它适合于档案的逐步完善与保存。本命令可用于档案补充。例如:第一个表中有A、B、C三人,第二个...

    db2-技术经验总结

    1.59. 如果怀疑应用程序有死锁现象,如何确认是否死锁,并判断是哪些程序引起的死锁? 84 1.60. 数据库创建以后相关的目录和文件都有哪一些? 85 1.61. 自增列(IDENTITY) 86 1.62. 修改表结构的注意事项(原) 86 1.63....

    通用文件筛选工具(批量查询按行存储的文本文件,并导入EXCEL表中)

    如果已经执行过查询操作,“output”文件夹下就会存在查询出的文件,当再次执行查询时,本程序会在已存在的文件后追加查询结果。这样就会出现重复的记录或内容。因此,当需要多次查询时,每次查询前需要点击“清空...

    mysql数据库的基本操作语法

    如果删除的表有外键, 删除的速度类似于delete。但新版本的MySQL中truncate的速度比delete速度快。 Ø 约束 MySQL中约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息; 约束主要...

    wsyscheck--强大的清理病毒木马的工具

    关闭程序时如果上述两者之一存在删除列表,会问询是否执行。 注意,为避免病毒程序守护,Wsyscheck可以在删除某些文件时可能会采取0字节文件占位的方式来确保删除。这些0字节文件在Wsyscheck退出后会被自动清理。...

    精通sql结构化查询语句

    23.3.3 删除存在的数据表 23.4 对数据库中表的操作 23.4.1 向表中添加记录 23.4.2 浏览表中记录 23.4.3 修改已有记录 23.4.4 删除指定记录 23.5 可回复留言板的开发(PHP+SQL Server) 23.5.1 数据表的设计 23.5.2 ...

    redis-3.2.0-win64

    RENAME oldname newname更改key的名字,新键如果存在将被覆盖 RENAMENX oldname newname 更改key的名字,如果名字存在则更改失败 DBSIZE返回当前数据库的key的总数 EXPIRE设置某个key的过期时间(秒),(EXPIRE ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    而且不能删除当前用户,如果删除的用户有数据对象,那么必须加上关键字cascade。 用法:drop user 用户名 [cascade] 四、 用户权限与角色 1. 权限 Oracle中权限主要分为两种,系统权限和实体权限。  系统权限:...

    数据库操作语句大全(sql)

    根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明...

    SQL培训第一期

    如果表之间有匹配行,则整个结果集行包含基表的数据值。 1.6.4.2 语法 select A.*, B.* from student_A A full outer join student_B B on A.Uuid = B.Uuid; 1.6.4.3 结果 1.6.4.4 全外连接不支持(+)写法 1.6.5 ...

    wsyscheck中文版

    关闭程序时如果上述两者之一存在删除列表,会问询是否执行。 注意,为避免病毒程序守护,Wsyscheck可以在删除某些文件时可能会采取0字节文件占位的方式来确保删除。这些0字节文件在Wsyscheck退出后会被自动清理。...

    wsyscheck by wangsea

    关闭程序时如果上述两者之一存在删除列表,会问询是否执行。 注意,为避免病毒程序守护,Wsyscheck可以在删除某些文件时可能会采取0字节文件占位的方式来确保删除。这些0字节文件在Wsyscheck退出后会被自动清理。...

Global site tag (gtag.js) - Google Analytics