`
lzh166
  • 浏览: 297218 次
  • 性别: 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平坦软件园

分享到:
评论

相关推荐

    C#判断文件是否存在并创建和删除文件夹folder

    这段代码会检查指定路径的文件是否存在,如果存在则输出“文件存在!”,否则输出“文件不存在。”。 接下来,我们来看如何创建文件夹。同样,我们使用`System.IO`中的`Directory`类及其`CreateDirectory`方法: `...

    C#判断文件是否存在并创建和删除文件夹

    在C#编程中,操作文件和目录是常见的任务,包括检查文件或文件夹是否存在、创建新的文件夹以及删除已存在的文件夹。以下是对这些操作的详细说明: 首先,要判断一个文件是否存在,可以使用`System.IO.File`类的`...

    Sql Server中判断表、列不存在则创建的方法

    在SQL Server中,数据库管理员经常需要检查表和列是否已经存在,以便进行相应的数据库操作,如创建、修改或删除。本篇文章将详细讲解如何在SQL Server中判断表和列是否存在,并展示如何在它们不存在时创建。 一、...

    易语言源码易语言判断文件是否存在源码.rar

    例如,假设我们有一个文件名为"example.txt",我们想要判断这个文件是否存在于当前目录下,可以这样编写代码: ```易语言 .文件路径 = "example.txt" // 定义文件路径 .存在状态 = 文件存在? (.文件路径) // 使用...

    判断SQL数据库中函数存储过程等是否存在的方法

    这通常是为了确保在执行创建、更新或删除操作之前不会发生重复或者冲突。以下是一些用于检查SQL数据库中这些对象是否存在的常用方法。 1. **检查数据库是否存在**: 使用`IF EXISTS`查询`master..sysdatabases`...

    判断有向图中是否存在环

    - 如果存在未被访问的顶点,则说明图中存在环。 #### 4. 代码解析 ```c #define MaxVertexNum 100 typedef enum { FALSE, TRUE } Boolean; // FALSE为0, TRUE为1 Boolean visited[MaxVertexNum]; // 初始化标志...

    python 实现:如果文件夹不存在就创建,如果文件存在就清空(csdn)————程序.pdf

    这样,无论文件夹是否已存在,最后都会有一个空的文件夹存在于指定的`filepath`位置。这样的设计更符合函数的预期行为。 总结来说,Python的`os`和`shutil`模块提供了丰富的文件系统操作功能,可以方便地实现对...

    C语言实现单向链表的创建、插入,删除节点,和2个链表合并

    总结,本篇文章介绍了C语言实现单向链表的基本操作,包括创建链表、插入节点、删除节点、判断链表是否有环以及合并两个已排序的链表。通过理解这些基本操作,可以为更复杂的数据结构和算法打下坚实的基础。在VC6.0...

    线性表的实现_代码(初始化、判断是否为空表、求表长、输出表、插入、删除、查找、修改、清空表、释放表空间、退出

    根据给定的文件标题、描述、标签以及部分内容,本文将详细介绍线性表的基本操作实现,包括初始化、判断是否为空表、求表长、输出表、插入元素、删除元素、查找元素、修改元素、清空表、释放表空间及退出等功能。...

    sql 判断数据库,表,存储过程等是否存在的代码

    这有助于确保在执行操作(如创建、修改或删除)之前不会覆盖已存在的对象,或者在尝试访问不存在的对象时避免错误。以下是一些用于检测这些元素是否存在的SQL语句的详细说明: 1. **判断数据库是否存在**: 使用`...

    linux shell 中判断文件、目录是否存在的方法

    # 如果存在文件“trials”,则删除它 if [ -f "trials" ]; then rm "${result_path}trials" fi # 如果不存在文件夹$result_name,则创建它 if [ ! -d "$result_name" ]; then mkdir -p "$result_name" fi # 判断...

    SQL SERVER先判断视图是否存在然后再创建视图的语句

    1. **使用`DROP VIEW IF EXISTS`**:在尝试创建视图之前,先检查并删除同名视图,如果存在的话。这可以通过结合`IF EXISTS`和`DROP VIEW`来实现: ```sql IF EXISTS (SELECT 1 FROM sys.views WHERE name='Report...

    delphi 动态创建access数据表

    - 如果数据库已存在,执行`CREATE TABLE`命令会报错,需要先判断表是否存在,或使用`ALTER TABLE`语句修改现有表结构。 通过以上步骤和知识点,你可以使用Delphi动态地创建Access数据库中的数据表。这只是一个基础...

    C++基础:怎样判断某一文件是否存在.doc

    而在进行这些操作之前,首先需要判断目标文件或文件夹是否存在,这对于避免错误和提高程序的健壮性至关重要。本文将详细介绍两种常用的方法来判断文件或文件夹的存在性:一是使用`&lt;fstream&gt;`库中的流对象方法,二是...

    创建数据库的一般步骤.pdf

    如果存在,则需要删除该数据库。可以使用以下命令: ```sql if exists (select * from sys.sysdatabases where [name]='数据库名称') drop database 数据库名称 go ``` 或者 ```sql if (select count(*) from ...

    java创建和删除文件夹、文件.doc

    但是需要注意的是,如果文件夹下有子文件或子文件夹,则不能直接删除,需要先递归删除子项。 ```java public void delFolder(String folderPath) { try { String filePath = folderPath; File delPath = new ...

    达梦数据库建表操作SQL语句大全.pdf

    如果需要从数据库中删除一个已经存在的表,可以使用 `DROP TABLE [表名]` 语句来完成。这个操作是不可逆的,一旦执行,表中的所有数据和表结构都将被移除。 3. 插入数据(INSERT INTO): 向表中添加数据可以使用...

    MyBatis动态创建表的实例代码

    如果需要在创建新表前删除已存在的表,可以使用`&lt;update&gt;`标签定义删除语句,例如: ```xml DROP TABLE IF EXISTS ${tableName} ``` 这里使用`${tableName}`来动态地指定表名。 3. 创建新表: 再定义一个...

    顺序表实现插入,查找,删除等功能

    在插入元素时,需要检查顺序表是否已满,如果已满则无法插入新的元素。 insertList(SeqList *list, int e) { int i=list-&gt;length-1; if(i&gt;=ListSize-1) { printf("表已满,不能增加新的项!\n"); exit(0); } ...

Global site tag (gtag.js) - Google Analytics