是否可以更新主键列?

时间:2017-11-07 16:27:29

标签: sql-server-2008 tsql

我被要求更新SQL Server表的主键列,该列已有值。在内部连接几个其他表时,我不得不从另一个表更新PK列值。由于重复,将值435插入2个或更多PK列,它没有这样做。

有什么建议可以做到吗?

UPDATE t
SET t.ID = c.NewID 
FROM Table1 t
INNER JOIN Table2 p ON p.ID = t.ID
LEFT OUTER JOIN Table3 c ON c.ID = t.ID
WHERE c.status = 'Y'

1 个答案:

答案 0 :(得分:1)

让我们说你的PK名为A,所以:

  • 创建一个名为B
  • 的新列
  • update table set B = A
  • 执行B
  • 所需的更改
  • 查看你有FK的所有桌子到你的桌子;删除它们,并确保反映数据变化;
  • 将PK放在A
  • B
  • 上重新创建
  • 重新创建您在B
  • 上3步前删除的所有FK

简单:)

我正在开玩笑,因为你可以看到它非常复杂且容易出错。你不应该担心你的PK值 - 如果你的设计有问题