问候!
我已经将数据从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/的想法