使用不匹配的数据创建外键约束



问候!

我已经将数据从sql插入文件插入到ms sql数据库中。显然,这些数据并不完全完整。当我尝试制作 ERD 并在表之间创建关键约束时,我发现了这一点。当我尝试将article_review与 order1 连接时,其中 order1 有一个主键,文章评论有一个外键。

我有一个查询,它选择具有不匹配键值的所有记录:见图:https://i.stack.imgur.com/6X7vG.jpg

所以我现在想做的是:在缺少 ID 值的article_review中插入新行。其他列的值并不重要,它们可以是 NULL 或随机生成的。

简单的联接不会真正削减它,因为所有其他列都是不相同的。

以上所有内容都是必需的,因为MS SQL 2016不允许我在两个表之间创建一个关键约束,其中一个表包含另一个表中没有的值,因此会引发错误:

'order1' table saved successfully
'article_review' table saved successfully
'review' table
- Unable to create relationship 'FK_review_order1'.  
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_review_order1". The conflict occurred in database "superDatabase", table "dbo.order1", column 'id'.

您是否只想为文档添加外键?

您可以像这样添加 FK:

ALTER TABLE dbo.order1 WITH NOCHECK 
ADD CONSTRAINT FK_review_order1 FOREIGN KEY (id) REFERENCES dbo.article_review (id)

注意 与否检查

这样,外键就已创建,但不受信任和禁用,这可以通过以下查询看到:

SELECT SCHEMA_NAME(fk.schema_id) AS sch, T.name,
        fk.name, is_disabled, is_not_trusted, fk.is_not_for_replication
FROM    sys.foreign_keys fk WITH (NOLOCK)
        INNER JOIN sys.tables T WITH (NOLOCK) ON T.object_id = fk.parent_object_id
WHERE   fk.is_not_trusted = 1
        AND fk.is_disabled = 0
ORDER BY SCHEMA_NAME(fk.schema_id), T.name, fk.name;

来自 https://www.brentozar.com/blitz/foreign-key-trusted/的想法

最新更新