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将被"遗忘"......
我不确定我是否遵循了你的全部问题,但你会检查是否存在这样的列:
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",这不应该导致任何问题.
如果您通过发送这些类型的脚本进行频繁更新,我将创建一个版本表,并在脚本的开头查询它.
归档时间: |
|
查看次数: |
9133 次 |
最近记录: |