【发布时间】:2010-10-26 05:35:54
【问题描述】:
在我的工作中,我们目前在推动跨环境的数据库更改时遇到了一些严重的问题。当我们在现有表上创建一个新的不可为空的列时,问题开始出现。 SQL Compare 生成的脚本将该列创建为不可为空,因此它总是会失败。我希望有一些替代手动编辑脚本的方法。有没有办法解决这个问题?如果没有,你们是怎么处理的?
【问题讨论】:
在我的工作中,我们目前在推动跨环境的数据库更改时遇到了一些严重的问题。当我们在现有表上创建一个新的不可为空的列时,问题开始出现。 SQL Compare 生成的脚本将该列创建为不可为空,因此它总是会失败。我希望有一些替代手动编辑脚本的方法。有没有办法解决这个问题?如果没有,你们是怎么处理的?
【问题讨论】:
创建表:
create table #bingo ( id int )
添加一个值:
insert into #bingo values (1)
添加新列:
alter table #bingo add userid int
填充新列:
update #bingo set userid = 1 where id = 1
将新列更改为不可为空:
alter table #bingo alter column userid int not null
您必须手动编辑 RedGate Sql Compare 以使其像这样工作。
【讨论】:
您打算如何填充 NOT NULL 列?我看不出 SQL Compare 是如何真正提出解决方案的,因为它无法知道您将如何填充它。
您可以使用 DEFAULT 创建列,然后只需在生成的脚本末尾添加一条更新语句,以在您有一些值的来源时正确更新该列。
【讨论】:
在新的非空列上添加默认值
当创建一个新的非空列时,所有现有的行得到什么值?如果您不知道,请将该列设为可为空。
【讨论】: