sql >> データベース >  >> RDS >> Sqlserver

外部キー制約を信頼する方法は?

    あなたの例に基づいて、私も試しました:

    • 外部キーをドロップして再作成します。
    • テーブルを削除して再作成します。

    次に、コマンドの中にあることに気付きました:

    NOT FOR REPLICATION
      

    NOT FOR REPLICATION で作成された制約は、常に信頼されていないようです。

    Books Online からの引用 :

    IS_NOT_TRUSTED のようです 設定はレプリケーションのみに関連 IS_NOT_FOR_REPLICATION の影響 .作業しているサーバーに制約が適用されている限り、問題ないはずです。だから私は先に進み、それを確認しました:

    SELECT name, is_disabled, is_not_trusted
    FROM sys.foreign_keys
    WHERE name = 'FK_Product_ProductKeyId'
    
    name                    is_disabled is_not_trusted
    FK_Product_ProductKeyId 0            1
    
    INSERT INTO dbo.Sale VALUES (2, GETDATE(), 1.00)
    
    Msg 547, Level 16, State 0, Line 1
    The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Product_ProductKeyId". The conflict occurred in database "_Scratch", table "dbo.Product", column 'ProductKeyId'.
    The statement has been terminated.
      

    それでも IS_NOT_TRUSTED = 0 を見たい場合 安心のために、NOT FOR REPLICATION なしで外部キーを再作成するだけです .

    疑問に思っている方のために、私は CHECK 制約に対しても同じ効果を検証しました。




    1. MySQLでのDebeziumフラッシュタイムアウトとOutOfMemoryErrorエラー

    2. SQLite JSON_EACH()

    3. ジェネリックリストC#のSQLServerへの一括挿入

    4. Oracleデータベース:BLOBの読み取り方法は?