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 获得全部信息

在 SQL Server 中判断某个的约束是否存在,可以通过查询系统目录视图或使用 `OBJECT_ID` 函数结合 `sys.objects` 或 `sys.check_constraints` 等系统视图来实现。以下是几种常用的方法: ### 方法一:使用 `sys.objects` 查询约束是否存在 可以通过查询 `sys.objects` 来判断特定的约束是否存在。例如,若要判断名为 `CK__People__PeopleSa__74AE54BC` 的 CHECK 约束是否存在,可以使用如下语句: ```sql IF EXISTS (SELECT 1 FROM sys.objects WHERE name = 'CK__People__PeopleSa__74AE54BC') BEGIN PRINT '约束存在' END ELSE BEGIN PRINT '约束不存在' END ``` ### 方法二:使用 `OBJECT_ID` 和约束类型 可以结合 `OBJECT_ID` 函数与对象类型参数来判断某一类型的约束是否存在。例如,检查某是否存在名为 `CK__People__PeopleSa__74AE54BC` 的 CHECK 约束: ```sql IF OBJECT_ID('CK__People__PeopleSa__74AE54BC', 'C') IS NOT NULL BEGIN PRINT 'CHECK 约束存在' END ELSE BEGIN PRINT 'CHECK 约束不存在' END ``` ### 方法三:查询 `sys.check_constraints` 视图 若要判断某个上的 CHECK 约束是否存在,可以结合 `sys.check_constraints` 和 `sys.tables`: ```sql IF EXISTS ( SELECT 1 FROM sys.check_constraints AS cc JOIN sys.tables AS t ON cc.parent_object_id = t.object_id WHERE t.name = 'People' AND cc.name = 'CK__People__PeopleSa__74AE54BC' ) BEGIN PRINT '该 CHECK 约束存在' END ELSE BEGIN PRINT '该 CHECK 约束不存在' END ``` ### 方法四:删除约束前判断是否存在 在实际脚本中,通常会先判断约束是否存在,再进行删除操作,以避免脚本执行失败: ```sql IF EXISTS (SELECT 1 FROM sys.objects WHERE name = 'CK__People__PeopleSa__74AE54BC') BEGIN ALTER TABLE People DROP CONSTRAINT CK__People__PeopleSa__74AE54BC PRINT '约束已删除' END ELSE BEGIN PRINT '约束不存在,无需删除' END ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值