“如果不存在”SQL CE上失败

时间:2011-01-10 23:54:50

标签: sql-server tsql sql-server-ce

我遇到了意想不到的问题。我正在制作一个脚本来更新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的问题的其他帖子,但我找不到这个特定问题的答案。

干杯
标记

更新

我花了一个多小时寻找解决方案。我发现许多帖子都在寻求类似问题的帮助,但我仍然不知道如何修复它。我真的不想在C#代码中这样做。我需要在SQL脚本中执行此操作。我不敢相信这个基本原因导致了这么多困难:(

3 个答案:

答案 0 :(得分:10)

似乎SQL CE根本不支持任何程序扩展;只有20世纪70年代的DDL和DML。

您必须将过程逻辑放在应用程序中(C#或其他),或者转到带有过程扩展的可嵌入数据库,如MySQL。

答案 1 :(得分:1)

我根本不习惯CE。 但是在我不会有任何过程扩展的情况下,我只需触发ALTER TABLE语句。 如果该字段已存在,则会出现异常。 因为你必须尝试...以任何一种方式捕获它,你只需要在你的短语中单独处理这个异常......

只是我的两分钱。

答案 2 :(得分:0)

我承认不熟悉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);