"Если не существует" не удается выполнить SQL CE

У меня возникла неожиданная проблема. Я создаю script для обновления схемы в базе данных SQL CE. Это не будет выполняться:

if not exists
(
    Select column_name from information_schema.columns
    where column_name = 'TempTestField' 
        and table_name = 'Inventory_Master_File' 
)
    Alter table Inventory_Master_File
      add TempTestField nvarchar(10) null   

Я думаю, это потому, что я использую вещи, которые не поддерживаются в SQL CE. Кто-нибудь знает, как это сделать? Я попытался перестроить script и не могу заставить работать. Я попробовал "изменить таблицу... где не существует...".

Обратите внимание, что часть "select" работает нормально, а также часть "alter". Проблема заключается в том, что "если не существует". Я знаю, что есть некоторые другие сообщения о таких проблемах, как использование SQL CE, но я не мог найти ответ на эту конкретную проблему.

Приветствия
Марк

UPDATE:

Я потратил более часа на поиски решения. Я нашел много сообщений с просьбой о помощи с подобными проблемами, но я до сих пор не знаю, как это исправить. Я действительно не хочу делать это в коде С#. Мне нужно сделать это в SQL script. Я не могу поверить в то, что эта основа вызывает столько трудностей: (

Ответ 1

Похоже, что SQL CE вообще не поддерживает никаких процедурных расширений; только DDL и DML, как с 1970-х годов.

Вам либо придется поместить процессуальную логику в ваше приложение (С# или что-то еще), либо перейти к встраиваемой базе данных с процедурными расширениями, такими как MySQL.

Ответ 2

Я вообще не привык к СЕ. Но в случае, если бы у меня не было никаких процедурных расширений, я просто уволил бы оператор ALTER TABLE. Если поле уже существует, вы получите исключение. Поскольку вам нужно попробовать... поймать его в любом случае, вам просто придется обрабатывать это исключение отдельно в вашей фразе catch...

просто мои два цента.

Ответ 3

Я признаюсь, что не знаком с особыми ограничениями SQL Server CE, однако, если он поддерживает Dynamic SQL, тогда это должно работать:

Declare @sql as nvarchar(max);
Set @sql = '';

Select @sql = 'Alter table Inventory_Master_File
  add TempTestField nvarchar(10) null   '
from information_schema.columns
where column_name = 'TempTestField' 
    and table_name = 'Inventory_Master_File' 

EXEC(@sql);