Salt la conținutul principal
Asistență
Conectare

Remediere: Constrângeri de integritate referențială sunt nu evaluează corect când planul de executare interogare utilizează operatorul străine cheie referință verifica în SQL Server 2016 și 2017


Hotfix and Security Content Publishing: 101794

Simptome

Să presupunem că încercați să ștergeți date dintr-un tabel, iar datele se se face referire în alte tabele în Microsoft SQL Server 2016 și 2017. euf să explorați interogare plan de execuție, aveți posibilitatea să vedeți se utilizează un operator străine cheie de referință verificare .În această situație, este posibil să primiți un mesaj de eroare următoare chiar dacă fiind rând elimină nu se face referire în alte tabele:

MSG 547, Level 16, State 0, linia LineNumber

DELETE declaraţie în conflict cu restricția de referință

Stare

Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.

Rezolvare

Această problemă este rezolvată în următoarea actualizare cumulativă pentru SQL Server:

Notă Această problemă este remediată în 6 de actualizare cumulativă pentru SQL Server 2016 SP2.

Despre actualizările cumulative pentru SQL Server:

Fiecare nouă actualizare cumulativă pentru SQL Server conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în actualizarea cumulativă anterioară. Verifica cele mai recente actualizări cumulative pentru SQL Server:

Soluție de evitare

Pentru a evita această problemă, utilizați una dintre metodele următoare:

  • Utilizează nivelul de compatibilitate 130 de mai jos pentru a executa această interogare.

  • Modificați structura index corelarea tabel.

Mai multe informații

Pornire baze de date au activat nivelul de compatibilitate configurare 130 în SQL Server 2016, un plan de executare interogare poate utiliza referință cheie străină Operatorul de selectare pentru a verifica dacă un rând într-un tabel se face referire în rândurile din alte tabele prin constrângeri de integritate referențială. Astfel operatorul poate fi utilizată dacă un tabel face referire la un număr mare de tabele externe. În acest operator, SQL Server alege un index în fiecare tabel corelarea se efectuează această verificare. Dacă un tabel corelarea are un index cu mai multe coloane cheie, astfel unele coloane de la începutul nu fac parte din cheia externă, dar alte câteva coloane fac parte din cheia externă. Acest lucru poate duce la selectare incorecte pe care se efectuează de SQL Server.

De exemplu, să luăm în considerare schema următoare:

Creare tabel tpk (pk int restricție cheie primară CPK clustere)

Creare tabel tfk (int, fk int restricție cfk referințe cheie străină tpk, index ia clustered(a,fk))

Schemă astfel poate duce la această problemă, dar dacă modificați ordine de coloane în index ia la (fk, o), nu va.

Referințe

Afla  terminologiacare Microsoft utilizează pentru a descrie actualizările software.

Bug Information:

KE: v-madora
Author: 
Writer: v-madora
Tech reviewer:  alexek; richen; tmichael; cobibi
Editor: v-idsun

Aveți nevoie de ajutor suplimentar?

Extindeți-vă competențele
Explorați instruirea
Fiți primul care obține noile caracteristici
Alăturați-vă la Microsoft Insider

V-a fost de ajutor această informație?

Cât de mulțumit sunteți de calitatea traducerii?

Ce v-a afectat experiența?

Aveți feedback suplimentar? (Opțional)

Vă mulțumim pentru feedback!

×