SQL Сервер - удалить сразу несколько столбцов с IF EXISTS - PullRequest
2 голосов
/ 29 мая 2020

SQL Сервер поддерживает синтаксис, позволяющий удалять более одного столбца за раз. Как удалить несколько столбцов с помощью одного оператора ALTER TABLE на SQL сервере?

Хотя, кажется, невозможно заставить его работать с классом IF EXISTS для каждого случая.

ALTER TABLE

DROP
| COLUMN [ IF EXISTS ]
      {
          column_name
      } [ ,...n ]

Условно отбрасывает столбец или ограничение, только если оно уже существует.

Пример:

CREATE TABLE t(i INT, col1 INT, col2 INT);

ALTER TABLE t DROP COLUMN IF EXISTS col1, col2;
-- col1, col2 were successfully removed

ALTER TABLE t DROP COLUMN IF EXISTS col1,  col2;
-- Msg 4924 Level 16 State 1 Line 1
-- ALTER TABLE DROP COLUMN failed because column 'col2' does not exist in table 't'.

На основе сообщения об ошибке IF EXISTS действует только для первого столбца.

db <> fiddle demo

Есть ли ограничение этого предложения при объединении сразу нескольких столбцов?

1 Ответ

5 голосов
/ 29 мая 2020

Синтаксис немного громоздкий, но

ALTER TABLE t DROP COLUMN IF EXISTS col1, 
                   COLUMN IF EXISTS col2;

отлично работает

...