我是一名 Web 开发人员,拥有 SQLServer 的管理员权限,我需要向现有表添加一个不可为空的整数列(外键)。我正在寻找创建此列并用数据填充它的最佳方法。
新列的示例:
branchId (int) non-nullable with a foreign key to the parent table
现有父表 Branch 的示例:
id (int) auto-incrementing primary key
branchName (varchar)
我知道我可以简单地设置默认值来指向正确的分支记录的 id,但我犹豫不决,因为分支 id 可能会因环境而异。
我的想法是首先将新的 branchId 列创建为可空,然后通过从查询(如 SELECT id FROM Branch WHERE branchName="Branch 4")中获取正确的 branchId,使用正确的 id 更新所有记录。然后,我会返回并将列更改为非可空,这应该没问题,因为它们现在都有数据了。
我的数据库更改脚本都保存在源代码控制中,所以这就是需要一个可以在将来任何时候运行的优雅解决方案的主要原因,无论分支 ID 是什么。
做到这一点的最好方法是什么?
答案1
您的方式就是我所做的方式 - 可空列,更新值,设置为非空。
中间步骤(在 SQL Server 中)可以通过执行以下操作来实现:
UPDATE
e
SET
e.BranchId = s.BranchId
FROM
ExistingTable e
INNER JOIN SourceTable s
ON e.Column = s.Column
由于我不知道您的 ERD 是什么样子的,我假设您的 JOIN 列不一定是您在问题中描述的分支名称。
这可能不够优雅,但是它避免了从 Branch 表中获取 ID 值作为默认值的步骤。
所以我的答案是相信你的直觉。