2016-02-08 71 views
0

問候!使用不匹配的數據創建外鍵約束

我已經將數據從sql插入文件插入ms sql數據庫。這個數據顯然並不完整。 我在嘗試創建ERD並在表之間創建關鍵約束時發現了這一點。 當我嘗試將article_review連接到order1,其中order1具有主鍵且文章評論具有外鍵時。

我在那裏選擇不匹配,將鍵值的所有記錄的查詢: 看到圖像:http://imgur.com/vDbCuG8

所以我想現在要做的: 插入新行與缺少的ID值article_review。其他列的值並不重要,它們可以是NULL或隨機生成的。

一個簡單的連接並不會真正地削減它,因爲所有其他列都不相同。

ps。上述所有的必要的,因爲MS SQL 2016不會讓我創建2個表之間的鍵約束,其中一人包含的值是不是在其他之一,因此引發錯誤:

'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'. 

回答

1

你只是想僅爲文檔添加外鍵?

您可以添加FK這樣的:

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

注意WITH NOCHECK

這種方式創建的外鍵,但不信任和殘疾人,可以用此可以看出查詢:

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/