Как я могу убедиться, что ограничение внешнего ключа не существует, если я не знаю, существует ли таблица? - PullRequest
0 голосов
/ 04 мая 2020

Если я знаю, что таблица существует, но я не знаю, существует ли ограничение внешнего ключа, тогда я могу сделать это:

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
}

1 Ответ

1 голос
/ 04 мая 2020

Что касается вашего вопроса, и, как прокомментировал Дейл К., вы не можете сделать это в одном утверждении.

Вместо этого, один вариант - сначала проверить таблица каталога 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 (поскольку ограничения с одинаковыми именами могут существовать в разных схемах).

...