zoukankan      html  css  js  c++  java
  • Sqlserver中判断表是否存在

    在sqlserver(应该说在目前所有数据库产品)中创建一个资源如表,视图,存储过程中都要判断与创建的资源是否已经存在 
    在sqlserver中一般可通过查询sys.objects系统表来得知结果,不过可以有更方便的方法 
    如下: 
        if   object_id('tb_table') is not null  
            print 'exist' 
        else 
            print'not exist' 
    如上,可用object_id()来快速达到相同的目的,tb_table就是我将要创建的资源的名称,所以要先判断当前数据库中不存在相同的资源 
    object_id()可接受两个参数,第一个如上所示,代表资源的名称,上面的就是表的名字,但往往我们要说明我们所要创建的是什么类型的资源, 
    这样sql可以明确地在一种类型的资源中查找是否有重复的名字,如下: 
        if   object_id('tb_table','u') is not null  
            print 'exist' 
        else 
            print'not exist' 
    第二个参数 "u" 就表示tb_table是用户创建的表,即:USER_TABLE地首字母简写 
    查询sys.objects中可得到各种资源的类型名称(TYPE列),这里之举几个主要的例子 
    u  -----------  用户创建的表,区别于系统表(USER_TABLE) 
    s  -----------  系统表(SYSTEM_TABLE) 
    v  -----------  视图(VIEW) 
    p  -----------  存储过程(SQL_STORED_PROCEDURE) 
    可使用select distinct type ,type_desc from sys.objects 获得全部信息
     
    库是否存在 
    if exists(select * from master..sysdatabases where name=N'库名') 
    print 'exists'
    else
    print 'not exists'
    --------------- 
    -- 判断要创建的表名是否存在 
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) 
    -- 删除表 
    drop table [dbo].[表名] 
    GO 
    --------------- 
    -----列是否存在 
    IF COL_LENGTH( '表名','列名') IS NULL
    PRINT 'not exists'
    ELSE
    PRINT 'exists'
    alter table 表名 drop constraint 默认值名称 
    go 
    alter table 表名 drop column 列名 
    go 
    ----- 
    --判断要创建临时表是否存在 
    If Object_Id('Tempdb.dbo.#Test') Is Not Null
    Begin
    print '存在'
    End
    Else
    Begin
    print '不存在'
    End
    --------------- 
    -- 判断要创建的存储过程名是否存在 
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[存储过程名]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
    -- 删除存储过程 
    drop procedure [dbo].[存储过程名] 
    GO 
    --------------- 
    -- 判断要创建的视图名是否存在 
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[视图名]') and OBJECTPROPERTY(id, N'IsView') = 1) 
    -- 删除视图 
    drop view [dbo].[视图名] 
    GO 
    --------------- 
    -- 判断要创建的函数名是否存在 
    if exists (select * from sysobjects where xtype='fn' and name='函数名') 
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[函数名]') and xtype in (N'FN', N'IF', N'TF')) 
    -- 删除函数 
    drop function [dbo].[函数名] 
    GO 
    if col_length('表名', '列名') is null
    print '不存在'
    select 1 from sysobjects where id in (select id from syscolumns where name='列名') and name='表名'
  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/hclw/p/4233312.html
Copyright © 2011-2022 走看看