有没有一种简单的方法将自定义迁移脚本添加到SQL Compare脚本中?

3

在我的工作中,我们目前在跨环境推送数据库更改时遇到了一些严重的问题。问题开始出现在我们在现有表上创建新的非空列时。SQL Compare生成的脚本将该列创建为非空,因此它将始终失败。我希望有一些替代方法,而不必手动编辑脚本。是否有任何方法可以解决这个问题?如果没有,你们是如何处理的?

3个回答

0
创建一个表格:
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才能使其像这样工作。


0
你打算如何填充 NOT NULL 列?我不知道 SQL Compare 如何提供解决方案,因为它无法知道你将如何填充该列。
你可以使用 DEFAULT 创建该列,然后在生成的脚本末尾添加一个更新语句,以便在有值来源时正确更新该列。

1
我希望有一种方法可以将它设置为创建所有列为空,然后留下一个空间供我更新表,然后再将列更改为非空。 - Jeffrey Lott

0

在新的非空列上添加默认值

当创建一个新的非空列时,所有现有行将获得什么值?如果您不知道,请将该列设置为可空。


这取决于变化,但通常它是从数据库内部提取的。 - Jeffrey Lott
@Correl,你怎么能指望在已有行的现有表格上添加一个新的非空列而不设置默认值呢?你可能想在创建列后删除默认值,以强制应用程序插入一个好的值。 - KM.
2
我希望RedGate能够为我提供一个在脚本中插入值的地方。比如创建可为空的列,留出空白区域让我添加自定义逻辑,然后将列更改为不可为空。我可以手动完成这个过程,但我希望RedGate能够让它变得更容易。 - Jeffrey Lott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接