KB4503379 – POPRAVKA: Ograničenja referencijalnog integriteta se ne procenjuju ispravno kada plan izvršavanja upita koristi operator za proveru reference sporednog ključa u SQL Server 2016 i 2017

Primenjuje se na
SQL Server 2017 Developer Windows SQL Server 2017 Enterprise Windows SQL Server 2017 Enterprise Core Windows SQL Server 2017 Standard Windows

Simptomi

Pretpostavimo da pokušavate da izbrišete podatke iz tabele, a na podatke se upućuje u drugim tabelama u sistemima Microsoft SQL Server 2016 i 2017. Ako istražujete plan izvršavanja upita, videćete da koristi operator za proveru reference sporednog ključa. U ovom slučaju, možete da dobijete sledeću poruku o grešci, čak i ako red koji brišete nije referenciran u drugim tabelama:

Poruka 547, nivo 16, država 0, broj reda

Izraz DELETE nije usaglašen sa ograničenjem REFERENCE

Status

Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku „Odnosi se na“.

Rešenje

Ovaj problem je rešen u sledećoj kumulativnoj ispravci za SQL Server:

Napomena Ovaj problem je rešen u kumulativnoj ispravci 6 za SQL Server 2016 SP2.

Osnovni podaci o kumulativnim ispravkama za SQL Server:

Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su uključene u prethodnu kumulativnu ispravku. Pogledajte najnovije kumulativne ispravke za SQL Server:

Privremeno rešenje

Da biste zaobišli ovaj problem, koristite jedan od sledećih metoda:

  • Koristite nivo kompatibilnosti ispod 130 da biste pokrenuli ovaj upit.
  • Promenite strukturu indeksa u tabeli za referenciranje.

Više informacija

Pokretanje nivoa kompatibilnosti 130 obuhvaćene bazom podataka U sistemu SQL Server 2016, plan izvršavanja upita može da koristi operator "Provjera reference sporednog ključa" kako bi potvrdio da li se na red u tabeli upućuje u nekom redu u drugim tabelama putem ograničenja referencijalnog integriteta. Ovaj operator može da se koristi ako na tabelu upućuje veliki broj sporednih tabela. U ovom operatoru, SQL Server bira indeks u svakoj referentnoj tabeli da bi izvršio takvu proveru. Ako tabela za referencu ima indeks sa više kolona ključa, neke kolone na početku nisu deo sporednog ključa, ali neke druge kolone jesu deo sporednog ključa. To može dovesti do netačne provere koju izvršava SQL Server.

Na primer, razmotrite sledeću šemu:

Kreiranje tabele: TPK (PK, INT CONSTRAINT, CPK, primarni ključ, grupisani)

create table tfk (a int, fk, int constraint, cfk, foreign key references tpk, index, ia clustered(a,fk))

Takva šema može da dovede do ovog problema, ali ako promenite redosled kolona u indeksu ia u (fk,a), neće.

Reference

Saznajte više o terminologiji koju Microsoft koristi za opisivanje softverskih ispravki.