«Если не существует» завершается ошибкой в ​​SQL CE - PullRequest
13 голосов
/ 11 января 2011

У меня неожиданная проблема.Я делаю сценарий для обновления схемы в базе данных 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.Кто-нибудь знает, как это сделать?Я попытался изменить сценарий и не могу заставить что-либо работать.Я попытался "изменить таблицу ... где не существует ...".

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

Cheers
Mark

ОБНОВЛЕНИЕ:

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

Ответы [ 3 ]

10 голосов
/ 11 января 2011

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

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

1 голос
/ 11 января 2011

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

только мои два цента.

0 голосов
/ 11 января 2011

Признаюсь, что не знаком со специальными ограничениями SQL Server CE, однако, если он поддерживает динамический 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);
...