T-SQL,求IF EXISTS和IF NOT EXISTS的实际使用示例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了T-SQL,求IF EXISTS和IF NOT EXISTS的实际使用示例相关的知识,希望对你有一定的参考价值。

学习if exists 时候,教材竟然是些很搞笑的示例。后来想一想都不符合逻辑 ↓
if exists(select * from sysdatabases where name='×××')
drop databases ×××
create database ×××
……
go

if exists(select * from sysobjects where name='×××')
drop table ×××
create table ×××
……
go

用OOP思想理解起来就是施工队要在工地施工,先派人(IF EXISTS)探测有没有具体某栋楼(NAME='×××'),有就拆掉然后建立这栋楼,没有就直接建这栋楼。

教材解释是防止已存在导致创建失败,仔细想想有点不符合逻辑。既然肯定要create “建楼”,根本就不用检查有没有了,有就drop没有就不drop,这里干嘛还用IF EXISTS来“探测”,是不是有点多余?

直接drop打头就可以。但这样是不是结合应用程序try catch 语句块又产生问题呢?

我感觉 EXITS 语句应该就是为了防止误删误操作之类用的,有点迷惑,

缺乏实际使用经验,望指正提供以下示例示范……

mysql的,对不对?

这是一个创建表的SQL

CREATE TABLE IF NOT EXISTS`tb_gonggao`
表tb_gonggao不存在,则创建

\'身份证\'INT(4)NOT NULL auto_increment的,
创建id字段,4个整数位,不允许为空,增量字段

`标题`VARCHAR(200)默认NULL,
创建一个title字段,200的字符串,缺省值是空

PRIMARY KEY(`ID`)
设置主键id字段
BR /> ENGINE = MyISAM表
使用MyISAM存储引擎,这意味着

DEFAULT CHARSET = latin1的,
存储在数据库默认的字符集

AUTO_INCREMENT = 23;
参考:的 http://blog.sina.com。 cn/s/blog_5da3d5c50100bjh0.html
参考技术A   直接drop打头不行的,如果没有该数据库/表,你drop谁去???要出错的追问

我是想知道EXISTS语句不应该用来防止误删么?这样的例子就是冲表冲数据库,不搞笑么。我想实际项目也是一个项目一个独立的数据库,哪有经常create 和drop的,所以就不知道EXISTS有什么很实际的用处了。

本回答被提问者采纳

SQL Server 2016新特性:DROP IF EXISTS

原文:SQL Server 2016新特性:DROP IF EXISTS

??

在我们写T-SQL要删除某个对象(表、存储过程等)时,一般会习惯先用IF语句判断该对象是否存在,然后DROP,比如:
旧版本:

IF OBJECT_ID(‘dbo.PERSON‘,‘U‘) IS NOT NULL
DROP TABLE PERSON

IF EXISTS (SELECT * FROM sys.objects where name = ‘PERSON‘)
DROP TABLE PERSON

SQL Server 2016简化了这一操作,通过下面一句简洁的SQL即可实现:
新版本(SQL Server 2016):

DROP TABLE  IF EXISTS PERSON

DROP IF EXISTS的语法如下:

DROPobject_type IFEXISTSobject_name


能够用于DROP的object_type,如Tables, Database, Function, Trigger, Stored Procedure, Column, User, Type, View, Schema,皆可套用,比如:

ALTER TABLE PERSON
DROP COLUMN If EXISTS NAME






以上是关于T-SQL,求IF EXISTS和IF NOT EXISTS的实际使用示例的主要内容,如果未能解决你的问题,请参考以下文章

是否有针对链接服务器的“IF EXISTS”测试?

IF EXISTS SQL 语句不起作用

sql的语句提示有语法错误,求大神 create database if not exists `fwzl`;

将数据导入mysql中,总是提示“DROP TABLE IF EXISTS XXX(我的表名)”出错,求大神指导!!

关于T-SQL的多重IF-ELSE嵌套

使用 IF..ELSE IF 控制 T-SQL SP 中的流 - 还有其他方法吗?