gpt4 book ai didi

sql-server - 向现有列添加外键约束

转载 作者:行者123 更新时间:2023-12-02 08:48:52 25 4
gpt4 key购买 nike

我有一个数据库,在数年的时间里,从几个不同的编码员那里获得了输入,经历了一些重大的转变。一些表包含通过引用列对其他数据的引用,但没有外键约束。这意味着有些表可能包含死链接。

我想为所有引用列添加外键约束。当某些数据可能引用死链接而其他数据实际上可能为空时,我如何确保这会成功。

我想我有必要说这样的话:

ALTER TABLE dbo.Users ADD CONSTRAINT FK_Users_Persons FOREIGN KEY
(
Person_ID --In some cases Person_ID will be null
) REFERENCES dbo.People
(
Person_ID
) ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT FOR REPLICATION

GO
ALTER TABLE dbo.Users
NOCHECK CONSTRAINT FK_Users_Persons
GO
COMMIT

请告诉我这是否准确以及是否存在任何隐藏的陷阱?

提前致谢

最佳答案

试试吧!如果有问题 - 引用表中不存在的值 - SQL Server 会告诉你,并且不会发生任何坏事 - 相信我! :-)

严肃地说:如果有问题,例如Users 中具有无效 Person_ID 值的行,那么 SQL Server 将创建 FK 约束 - 就这么简单。

在这种情况下,如果您在 Users 表中确实有条目没有引用 Person 表中的有效 Person_ID - 您需要先解决这些问题。将它们设置为 NULL(如果您无法确定他们引用的是什么人),或者将它们设置为有效的 Person_ID - 然后再次尝试添加 FK 约束。

您还可以在使用如下查询应用 FK 约束之前找到这些条目:

 SELECT (columns)
FROM dbo.Users
WHERE Person_ID IS NOT NULL
AND Person_ID NOT IN (SELECT DISTINCT Person_ID FROM dbo.Person)

关于sql-server - 向现有列添加外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10140703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com