开发者社区 问答 正文

在SQL Server中删除的IF语句

我的数据库中有两个表,分别称为Phases和Releases。第一个包含了外键Releases的Id命名ReleaseId。如果要删除Release,首先要检查其中是否有任何Phase内容(例如,Phases包含的Id中有任何列Release)。如果存在,则删除Phase,然后删除Release。否则,我只删除Release。

因此,我将用SQL Server编写的以下查询放在一起:


IF (SELECT * FROM Phases WHERE ReleaseId='2002') IS NOT NULL
BEGIN
DELETE FROM Phases WHERE ReleaseId='2002'
DELETE FROM Releases WHERE Id='2002'
END
ELSE
BEGIN
DELETE FROM Releases WHERE Id='2002'
END

但这给了我以下错误:

如果未使用EXISTS引入子查询,则只能在选择列表中指定一个表达式。

我对SQL非常不满意,因此无法解决此问题。怎么了?

展开
收起
Puppet 2020-01-05 10:35:27 717 分享 版权
1 条回答
写回答
取消 提交回答
  • 为什么不只在带有子句的phases(releaseId)引用上创建外键约束呢?它实现了您正在寻找的确切行为:releases(Id)on delete cascade

    
    alter table phases 
    add constraint fk_phases_releases
    foreign key (releaseId)
    references releases(Id)
    on delete cascade;
    

    每当父记录被删除时,约束将自动删除子记录

    2020-01-05 10:36:06
    赞同 展开评论