添加新的不可空列的最佳方法是什么?

我是一个Web开发人员,在我们的SQLServer上拥有pipe理权限,我需要将一个不可为空的整数列(外键)添加到现有的表中。 我正在寻找创build此列的最佳方式,并用数据填充它。

新列的示例:

branchId (int) non-nullable with a foreign key to the parent table 

现有父表的示例,Branch:

 id (int) auto-incrementing primary key branchName (varchar) 

我知道我可以简单地将默认值设置为正确的分支logging的ID,但我很犹豫,因为分支ID可能会有所不同,环境之间。

我的想法是首先创build新的branchId列作为可空,然后更正所有logging与正确的ID从获取适当的branchId像查询如SELECT ID FROM Branch WHERE branchName =“Branch 4”。 然后,我会回去,将列更改为不可空,这应该是罚款,因为他们现在都有数据。

我的数据库更改脚本都保存在源代码pipe理中,所以这是需要一个可以在将来随时运行的优雅解决scheme的主要原因,无论Branch ID是什么。

什么是最好的方法来做到这一点?

你的方式是我怎么做 – 可空列,更新值,设置为不可空。

中间步骤(在SQL Server中)可以通过执行如下操作来实现:

 UPDATE e SET e.BranchId = s.BranchId FROM ExistingTable e INNER JOIN SourceTable s ON e.Column = s.Column 

由于我不知道你的ERD是什么样的,我假设你的JOIN列不一定是你在问题中描述的分支名称。

它可能不够高雅,但它避免了从分表中获取默认值的ID值的步骤。

所以我的答案是相信你的本能。