Symptomer
La oss si at du prøver å slette data fra en tabell, og at dataene refereres til i andre tabeller i Microsoft SQL Server 2016 og 2017. Hvis du utforsker planen for utførelse av spørringer, kan du se den bruke en referansekontrolloperator for sekundærnøkkel. I slike situasjoner kan du få følgende feilmelding selv om raden som slettes, ikke refereres til i andre tabeller:
Msg 547, nivå 16, delstat 0, linjenummer
DELETE-setningen kom i konflikt med REFERENCE-begrensningen
Status
Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen «Gjelder for».
Oppløsning
Dette problemet er løst i følgende kumulative oppdatering for SQL Server:
Vær oppmerksom på Dette problemet er løst i Kumulativ oppdatering 6 for SQL Server 2016 SP2.
Om kumulative oppdateringer for SQL Server:
Hver nye kumulative oppdatering for SQL Server inneholder alle hurtigreparasjoner og alle sikkerhetsrettinger som fulgte med den forrige kumulative oppdateringen. Ta en titt på de nyeste kumulative oppdateringene for SQL Server:
Midlertidig løsning
Bruk en av følgende metoder for å omgå dette problemet:
- Bruk kompatibilitetsnivå under 130 til å kjøre denne spørringen.
- Endre indeksstrukturen i referansetabellen.
Mer informasjon
Starte kompatibilitetsnivå 130 for konfigurasjon med databaseomfang I SQL Server 2016 kan en spørringsutførelsesplan bruke operatoren Referansekontroll for sekundærnøkkel til å kontrollere om en rad i en tabell refereres til av noen rader i andre tabeller gjennom referanseintegritetsbegrensninger. Slike operatorer kan brukes hvis et stort antall sekundærtabeller refererer til en tabell. I denne operatoren velger SQL Server en indeks i hver referansetabell som skal utføre en slik kontroll. Hvis en refererende tabell har en indeks med flere nøkkelkolonner, er for eksempel noen kolonner i begynnelsen ikke en del av sekundærnøkkelen, men andre kolonner er en del av sekundærnøkkelen. Dette kan føre til feil kontroll som utføres av SQL Server.
Tenk deg for eksempel følgende skjema:
opprette tabell tpk (pk, int, constraint, cpk, primærnøkkel, gruppert)
opprette tabell tfk (A INT, FK, INT, betingelse, CFK, sekundærnøkkel, referanser, tpk, indeks, ia, gruppert(a,fk))
Et slikt skjema kan føre til dette problemet, men hvis du endrer rekkefølgen på kolonnene i indeks IA til (fk,a), vil det ikke føre til dette.
Kilder
Finn ut mer om terminologien som Microsoft bruker til å beskrive programvareoppdateringer.