Вы хотите выполнить запрос один раз для каждого столбца, если нет абсолютно никакого способа, чтобы таблица могла иметь один из столбцов, но не другой. Потому что, если вы проверяете наличие обоих столбцов одновременно и только один из них существует, то если вы попытаетесь добавить оба столбца, ALTER TABLE вызовет исключение, так как один из столбцов уже существует. Либо придерживайтесь того, что у вас есть, и делайте это один раз для каждого столбца, или если производительность имеет решающее значение, напишите 3 оператора ... один для обоих столбцов одновременно, а затем по одному для каждого столбца. Псевдокод будет выглядеть примерно так:
If neither column exists
Alter table...add both columns
else if ColumnA exists and ColumnB does not
Alter Table...add ColumnB
else if ColumnB exists and ColumnA does not
Alter Table...add ColumnA
что-то, как это будет возвращать таблицы, которые отсутствуют обе колонки ...
SELECT *
FROM INFORMATION_SCHEMA.TABLES T
WHERE TABLE_TYPE = 'BASE TABLE'
AND NOT EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS C
WHERE C.TABLE_CATALOG = T.TABLE_CATALOG
AND C.TABLE_SCHEMA = T.TABLE_SCHEMA
AND C.TABLE_NAME = T.TABLE_NAME
AND C.COLUMN_NAME IN ('Column1', 'Column2'));
Обязательно ссылку TABLES, чтобы вы случайно не пытаться изменить вид.
Просто написать этот скрипт дважды. – abatishchev
Или проверьте 'if (выберите count (1) из COLUMNS, где COLUMN_NAME в ('ColumnC', 'ColumnD')) = 2)' – abatishchev
не работал для меня – Ronnie