0

ご挨拶!

SQL挿入ファイルからms SQLデータベースにデータを挿入しました。どうやら、このデータは完全ではありません。これは、ERD を作成し、テーブル間の主要な制約を作成しようとしていたときに発見されました。article_review を order1 に接続しようとすると、order1 には主キーがあり、article review には外部キーがあります。

キー値が一致しないすべてのレコードを選択するクエリがあります。画像を参照してください: http://imgur.com/vDbCuG8

ここでやりたいこと: ID 値が欠落している新しい行を article_review に挿入します。他の列の値は実際には問題ではなく、NULL またはランダムに生成される可能性があります。

単純な結合では、他のすべての列が同一ではないため、実際にはうまくいきません。

ps。上記のすべてが必要なのは、ms sql 2016 では 2 つのテーブル間にキー制約を作成できないためです。テーブルの 1 つに他のテーブルにない値が含まれているため、エラーがスローされます。

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

1 に答える 1

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/からのアイデア

于 2016-03-10T15:47:25.537 に答える