如果列不存在alter table

Ash*_*Ash 0 if-statement transactions sql-server-2005

我使用生成的SQL脚本(sql 2k5)将列添加到表中.

我需要添加"检查是否存在",因为我的客户有时会运行脚本两次.(我无法控制这部分,这种情况一次又一次地发生)

我发现了一种加入sysobjects和syscolumns的方法,它可以工作.

我的问题是我必须在另一个表中添加一列,其中列不在表的末尾.

对于这个,SQL正在生成那么长的代码...用新列创建新的临时表,从旧表填充,删除旧表,最后重命名临时表.

这里的问题是这个脚本的脚本中有很多GO和事务...

我能做什么?

1.)删除所有GO - s?(不喜欢这个主意)

2.)在每个GO对之间添加我的IF?(不喜欢这个主意)

3.)是否有另一种有意义的方式,实施起来并不难

我无法想到任何事情,我可以检查发布版本,或者任何东西,而不仅仅是我的sysobjects和syscolumns join,但问题将是相同的.

因为GO-s,当它到达BEGIN的END时,我的If将被"遗忘"......

Ale*_* K. 7

我不确定我是否遵循了你的全部问题,但你会检查是否存在这样的列:

if not exists (select * from information_schema.columns 
               where table_name = '[the tables name]' 
               and column_name = '[column name')
begin
 --alter table here
end
Run Code Online (Sandbox Code Playgroud)

为什么要担心色谱柱的序数位置?新列获得一个新的colid并附加到"end",这不应该导致任何问题.

如果您通过发送这些类型的脚本进行频繁更新,我将创建一个版本表,并在脚本的开头查询它.