-1

如果我知道表存在但我不知道外键约束是否存在,那么我可以这样做:

ALTER TABLE table_name DROP CONSTRAINT IF EXISTS constraint_name

如果我不知道表本身是否存在怎么办?我想要一个具有如下结果的语句:

if (the table does not exist)
{
    nothing happens
}
else if (the table exists, but the foreign key constraint does not exist)
{
    nothing happens
}
else
{
    the foreign key constraint is dropped, but the table continues to exist
}
4

1 回答 1

1

就您的问题而言,正如 Dale K 所评论的那样,您不能在一个声明中做到这一点。

相反,一个选项是在尝试删除它之前首先检查目录表是否存在约束,例如:information_schema.referential_constraints

if (exists (
    select 1
    from information_schema.referential_constraints 
    where constraint_name  = 'myconstraint'
))
begin
    alter table mytable drop constraint myconstraint;
end

如果表不存在,if则不满足条件,alter table语句不会运行。

请注意,您可能希望在 的constraint_schema列上添加过滤器referential_constraints(因为相同名称的约束可能存在于不同的模式中)。

于 2020-05-03T22:26:30.713 回答