Log på med Microsoft
Log på, eller opret en konto.
Hej
Markér en anden konto.
Du har flere konti
Vælg den konto, du vil logge på med.

Symptomer

Når du bruger funktionerne SCOPE_IDENTITY()eller @@IDENTITYtil at hente de værdier, der er indsat i en identitetskolonne, bemærker du muligvis, at disse funktioner nogle gange returnerer forkerte værdier. Problemet opstår kun, når dine forespørgsler bruger parallelle eksekveringsplaner. Hvis du vil have mere at vide om, hvordan du kan afgøre, om dine forespørgsler skal bruge parallel eksekveringsplaner, skal du se afsnittet Parallelitetsforespørgsel i følgende tekniske artikel om Microsoft Downloads:

Årsag

Microsoft har bekræftet, at dette problem forekommer i de Microsoft-produkter, der er anført i starten af denne artikel.

Løsning

Oplysninger om kumulativ opdatering

SQL Server 2008 R2 Service Pack 1

Rettelsen til dette problem blev først udgivet i Kumulativ opdatering 5 til SQL Server 2008 R2 Service Pack 1. Du kan finde flere oplysninger om, hvordan du får denne kumulative opdateringspakke, ved at klikke på følgende artikelnummer for at få vist artiklen i Microsoft Knowledge Base: 

2659694Samlet opdateringspakke 5 til SQL Server 2008 R2 Service Pack 1

Bemærk! Da builds er kumulative, indeholder hver ny rettelse alle hotfixes og alle de sikkerhedsrettelser, der var inkluderet i den forrige SQL Server 2008 R2-rettelsesversion. Vi anbefaler, at du overvejer at anvende den nyeste rettelsesversion, der indeholder dette hotfix. Få flere oplysninger ved at klikke på følgende artikelnummer for at få vist artiklen i Microsoft Knowledge Base:

2567616De SQL Server 2008 R2-builds, der blev udgivet efter SQL Server 2008 R2 Service Pack 1 blev udgivet

Løsning

Microsoft anbefaler, at du ikke bruger nogen af disse funktioner i dine forespørgsler, når parallelle planer er involveret, da de ikke altid er pålidelige. Brug i stedet DELsætningen OUTPUT i INSERT-sætningen til at hente identitetsværdien, sådan som det er vist i eksemplet nedenfor.

Eksempel på brug af OUTPUT-delsætningen:

DECLARE @MyNewIdentityValues tabel(myidvalues int)
declare @A tabel (id int primary key)
indsæt i @A (1)
declare @B tabel (ID int primary key identity(1,1), B int not null)
indsæt i @B værdier (1)
skal du vælge
    [RowCount] = @@RowCount,
    [@@IDENTITY] = @@IDENTITY,
    [SCOPE_IDENTITY] = SCOPE_IDENTITY()

angiv statistikprofil på
indsæt i _ddr_T
output inserted.ID til @MyNewIdentityValues
    skal du vælge
            
b.ID         fra @A a
            venstre joinforbindelse @B b på b.ID = 1
            venstre deltag @B b2 på b2. B = -1

            venstre joinforbindelse _ddr_T t på t.T = -1

        where not exists (select * from _ddr_T t2 where t2.ID = -1)
slå statistikprofil fra

skal du vælge
    [RowCount] = @@RowCount,
    [@@IDENTITY] = @@IDENTITY,
    [SCOPE_IDENTITY] = SCOPE_IDENTITY(),
    [IDENT_CURRENT] = IDENT_CURRENT('_ddr_T')
vælg * fra @MyNewIdentityValues

Hvis din situation kræver, at du skal bruge en af disse funktioner, kan du bruge en af følgende metoder til at løse problemet.

Metode 1:

Medtag følgende indstilling i din forespørgsel

Indstilling (MAKSDOP 1)

Bemærk!Dette kan skade ydeevnen for SELECT-delen af din forespørgsel.

Metode 2:

Læs værdien fra SELECT-delen i et sæt variabler (eller en enkelt tabelvariabel), og indsæt derefter i måltabellen med MAXDOP=1. Da INSERT-planen ikke er parallel, får du den rigtige semantik, men din SELECT vil være parallel for at opnå den ønskede ydeevne.

Metode 3:

Kør følgende sætning for at angive den maksimale grad af parallelitet til 1:

sp_configure "maks. parallelitetsgrad", 1

omkonfigurere med tilsidesættelse

Bemærk!Denne metode kan medføre forringet ydeevne på serveren. Du bør ikke bruge denne metode, medmindre du har evalueret den i et test- eller opsætningsmiljø.

Flere oplysninger

Microsoft Connect-fejl på dette problem

Max Degree of Parallelism (MAXDOP)

Har du brug for mere hjælp?

Vil du have flere indstillinger?

Udforsk abonnementsfordele, gennemse kurser, få mere at vide om, hvordan du sikrer din enhed og meget mere.

Communities hjælper dig med at stille og besvare spørgsmål, give feedback og høre fra eksperter med omfattende viden.

Var disse oplysninger nyttige?

Hvor tilfreds er du med kvaliteten af sproget?
Hvad påvirkede din oplevelse?
Når du trykker på Send, bliver din feedback brugt til at forbedre Microsoft-produkter og -tjenester. Din it-administrator kan indsamle disse data. Erklæring om beskyttelse af personlige oplysninger.

Tak for din feedback!

×