Logg på med Microsoft
Logg på, eller opprett en konto.
Hei,
Velg en annen konto.
Du har flere kontoer
Velg kontoen du vil logge på med.

Symptomer

Når du bruker enten SCOPE_IDENTITY() eller @@IDENTITYtil å hente verdiene som settes inn i en identitetskolonne, legger du kanskje merke til at disse funksjonene noen ganger returnerer uriktige verdier. Problemet oppstår bare når spørringene bruker parallelle utførelsesplaner. Hvis du vil ha mer informasjon om hvordan du finner ut om spørringene skal bruke parallelle utførelsesplaner, kan du se delen Parallellisme for intraspørring i følgende tekniske artikkel om Microsoft-nedlastinger:

Årsak

Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i begynnelsen av denne artikkelen.

Løsning

Kumulativ oppdateringsinformasjon

SQL Server 2008 R2 Service Pack 1

Løsningen på dette problemet ble først utgitt i kumulativ oppdatering 5 for SQL Server 2008 R2 Service Pack 1. Hvis du vil ha mer informasjon om hvordan du får tak i denne kumulative oppdateringspakken, klikker du følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base: 

2659694Kumulativ oppdateringspakke 5 for SQL Server 2008 R2 Service Pack 1

Obs! Siden byggene er kumulative, inneholder hver nye løsningsversjon alle hurtigreparasjonene og alle sikkerhetsoppdateringene som ble inkludert i den forrige sql server 2008 R2-løsningsversjonen. Vi anbefaler at du vurderer å bruke den nyeste løsningen som inneholder denne hurtigreparasjonen. Hvis du vil ha mer informasjon, kan du lese følgende artikkel i Microsoft Knowledge Base:

2567616SQL Server 2008 R2-bygg som ble utgitt etter at SQL Server 2008 R2 Service Pack 1 ble utgitt

Omgå problemet

Microsoft anbefaler at du ikke bruker noen av disse funksjonene i spørringene når parallelle planer er involvert, da de ikke alltid er pålitelige. Bruk i stedet OUTPUT-setningen for INSERT-setningen til å hente identitetsverdien som vist i eksemplet nedenfor.

Eksempel på bruk av OUTPUT-setningsdel:

DEKLARER @MyNewIdentityValues tabell(myidvalues int)
deklarere @A tabell (ID int primærnøkkel)
sett inn @A verdier (1)
deklarere @B tabell (ID int primary key identity(1,1), B int not null)
sett inn @B verdier (1)
velg
    [RowCount] = @@RowCount,
    [@@IDENTITY] = @@IDENTITY,
    [SCOPE_IDENTITY] = SCOPE_IDENTITY()

angi statistikkprofil på
sett inn i _ddr_T
utdata inserted.ID i @MyNewIdentityValues
    velg
            
b.ID         fra @A en
            venstre sammenføyning @B b på b.ID = 1
            venstre sammenføyning @B b2 på b2. B = -1

            venstre sammenføyning _ddr_T t.T = -1

        der det ikke finnes (velg * _ddr_T t2 der t2.ID = -1)
angi at statistikkprofil skal være deaktivert

velg
    [RowCount] = @@RowCount,
    [@@IDENTITY] = @@IDENTITY,
    [SCOPE_IDENTITY] = SCOPE_IDENTITY(),
    [IDENT_CURRENT] = IDENT_CURRENT('_ddr_T')
velg * fra @MyNewIdentityValues

Hvis situasjonen krever at du må bruke en av disse funksjonene, kan du bruke en av følgende metoder for å omgå problemet.

Metode 1:

Inkluder følgende alternativ i spørringen

OPTION (MAXDOP 1)

Obs!Dette kan skade ytelsen til SELECT-delen av spørringen.

Metode 2:

Les verdien fra SELECT-delen i et sett med variabler (eller én enkelt tabellvariabel), og sett deretter inn i måltabellen med MAXDOP=1. Siden INSERT-planen ikke vil være parallell, får du riktig semantisk, men SELECT vil være parallelt for å oppnå ønsket ytelse.

Metode 3:

Kjør følgende setning for å angi maksimal grad av parallellisme til 1:

sp_configure 'maks. grad av parallellisme', 1

konfigurere på nytt med overstyring

Obs!Denne metoden kan føre til dårligere ytelse på serveren. Du bør ikke bruke denne metoden med mindre du har evaluert den i et testings- eller oppsamlingsmiljø.

Mer informasjon

Microsoft Connect-feil på dette problemet

Max Degree of Parallelism (MAXDOP)

Trenger du mer hjelp?

Vil du ha flere alternativer?

Utforsk abonnementsfordeler, bla gjennom opplæringskurs, finn ut hvordan du sikrer enheten og mer.

Fellesskap hjelper deg med å stille og svare på spørsmål, gi tilbakemelding og høre fra eksperter med stor kunnskap.

Var denne informasjonen nyttig?

Hvor fornøyd er du med språkkvaliteten?
Hva påvirket opplevelsen din?
Når du trykker på Send inn, blir tilbakemeldingen brukt til å forbedre Microsoft-produkter og -tjenester. IT-administratoren kan samle inn disse dataene. Personvernerklæring.

Takk for tilbakemeldingen!

×