INSERT语句中是否有条件 - 例如只有INSERT如果> B'

时间:2016-12-11 13:03:36

标签: sql validation if-statement sql-insert

所以我知道我可以使用像PHP这样的其他语言来检查条件,然后只在条件匹配时插入,但是有没有办法在纯SQL中执行此操作?我想我可以创建一个具有这种条件的VIEW,但是假设我有效地拥有表Event(EventID,StartDate,EndDate),有没有办法让SQL只插入数据,如果EndDate>开始日期?如果没有,则返回错误。我猜逻辑会像下面那样,但显然它不会起作用......

INSERT INTO Event(EventID, StartDate, EndDate) VALUES(1, 01/01/2016, 02/02/2016) WHERE EndDate > StartDate

Soooooo ......使用纯粹的SQL是可能的吗?

2 个答案:

答案 0 :(得分:0)

是的,这是可能的。您可以使用检查约束。有点像下面

Alter date _ column add constant const_name Check( value>Get date()).

或者,如果您无法更改架构,则可以使用sql存储过程来插入和检查此条件。 希望它有所帮助。

答案 1 :(得分:0)

如果您希望数据库保证数据正确,那么您需要check约束:

alter table event
    add constraint chk_startdate_enddate check (startdate < enddate);

并非所有数据库都支持检查约束(尽管它们是标准SQL),因此您可能需要使用触发器。

如果您只想在应用程序级别进行验证,请使用insert . . . select。典型语法是:

INSERT INTO Event(EventID, StartDate, EndDate) 
    SELECT EventID, StartDate, EndDate
    FROM (SELECT 1 as EventId, '2016-01-01' as StartDate, '2016-02-02' as EndDate
         ) x
    WHERE EndDate > StartDate;

注意:某些数据库在子查询中需要FROM子句,例如FROM dual