DetailPage-MSS-KB

Knowledge Base

Artikel ID: 956718 - Laatste beoordeling: zaterdag 19 maart 2011 - Wijziging: 2.0

Deze hotfix is als download beschikbaar
Download deze hotfix nu
 
 
BUG #: 50003167 (SQL-Hotfix)
Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie over de hoofdlijst builds die zijn uitgebracht na SQL is uitgebracht:
957826  (http://support.microsoft.com/kb/957826/ ) Waar vindt u meer informatie over SQL Server 2008 bouwt die zijn uitgebracht na SQL Server 2008 en SQL Server 2005 maakt die zijn uitgebracht na Service Pack 2 voor SQL Server 2005

Symptomen

In Microsoft SQL Server 2008 kan een refererende-sleutelbeperking niet worden afgedwongen wanneer de volgende voorwaarden voldaan wordt:
  • Een instructie samenvoegen wordt uitgegeven.
  • De kolom van het doel van de update heeft een unieke niet geclusterde index.
Het volgende scenario. De instructie updates een unieke kolom met de naamKolom1een tabel met de naamTabel1.Tabel1een refererende-sleutelbeperking uit een tabel met de naam wordt verwezenTabel2.

Het resultaat is dat rijenTabel1Wanneer zij moeten niet zijn gewijzigd. BovendienTabel2dangling naar verwijzingen rijen hebbenTabel1.

Dit probleem doet zich voor dit scenario de volgende omstandigheden:
  • De referentieKolom1kolom inTabel1is geen onderdeel van de sleutel van clusteringTabel1.
  • Slechts één mogelijke waarde kan worden toegewezen aan deKolom1kolom. Bijvoorbeeld, optreedt een van de volgende situaties:
    • De gegevensbron voor samenvoegen wordt één rij met gegevens. De gegevensbron voor samenvoegen is bijvoorbeeld een van de volgende select-instructies:
      • select <ConstantValues>
      • select <Parameters>
      OpmerkingDit scenario is het meest waarschijnlijke.
    • De gegevensbron voor samenvoegen is eigenlijk een enkele rij. De gegevensbron voor samenvoegen is bijvoorbeeld een van de volgende select-instructies:
      • select <ColumnName> from <TableName> where <TableName>.<ColumnName> = 1
        Opmerking<tablename></tablename>.<columnname></columnname>queryoptimalisatie is bekend dat een unieke waarde.
      • select top 1 <ColumnName> from <TableName>
    • Join tussen de gegevensbron samenvoegen en het doel van het samenvoegen heeft een predikaat garandeert dat één rij wordt bijgewerkt.
    • De update-component stelt deKolom1kolom met een constante waarde, ongeacht de samenvoegbewerkingsbron voor.
  • DeOp het trapsgewijs bijwerkenniet is ingeschakeld op de refererende-sleutelbeperking inTabel2.
OpmerkingWij raden aan dat u deze hotfix als u de instructie samenvoegen kolommen niet-gegroepeerde unieke indexen waarnaar wordt verwezen door de beperkingen van refererende sleutels hebben.

Oplossing

De correctie voor dit probleem werd eerst uitgebracht in cumulatieve Update 1.Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie over het verkrijgen van dit cumulatieve updatepakket voor SQL Server 2008:
956717  (http://support.microsoft.com/kb/956717/ ) Cumulatieve updatepakket 1 voor SQL Server 2008
OpmerkingOmdat de builds cumulatief zijn, elke nieuwe release correctie bevat alle hotfixes en de beveiligingscorrecties die opgenomen in de vorige SQL Server 2008 zijn release opgelost. Wij raden de meest recente fix release waarin deze hotfix toepast.Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie:
956909  (http://support.microsoft.com/kb/956909/ ) SQL Server 2008 bouwt die zijn uitgebracht nadat SQL Server 2008 is uitgebracht.

Workaround

Het pakket elimineert het probleem. Volg deze stappen om dit probleem te voorkomen als u de instructie samenvoegen in het scenario dat is beschreven in de sectie 'Symptomen' en als u niet de hotfix toepast:
  1. Herschrijf de instructie samenvoegen zodat de waarden voor de gegevensbron samenvoegen in een tabel, tijdelijk, of tabelvariabele in plaats van in-lined in de query.
  2. Traceringsvlag 8790 gebruiken. Deze traceringsvlag dwingt de optimizer gebruiken een soort van plan een plan breed update genoemd. Breed update plannen geen probleem. Deze stap voert prestaties risico's voor alle DML-instructies. Daarom raadzaam met deze stap, tenzij de toepassing wijzigen onmogelijk is.
De volgende Transact-SQL-script toont één manier uw script voor dit probleem als u deze hotfix kan niet wijzigen.

U hebt bijvoorbeeld een script de volgende strekking:
use tempdb;

drop table sale, product;
create table product(pno int not null primary key, name char(30), pAlternateKey char(6) not null unique);
create table sale(sno int not null primary key, pAlternateKey char(6) not null references product(pAlternateKey));
insert product values(1, 'Office Chair', 'ochair');
insert sale values(1, 'ochair')

-- No violation of foreign key constraint is detected. However, one should be.
merge into product
using (select 'Office Chair2' as name, 1 as pno, 'oxx' as pAlternateKey) as src
on product.pno = src.pno
when matched then
   update set product.pAlternateKey = src.pAlternateKey, 
              product.name = src.name
when not matched then
   insert values(src.pno, src.name, src.pAlternateKey);
Het script wijzigen zodat deze de volgende strekking weergegeven:
insert product values(1, 'Office Chair', 'ochair');
insert sale values(1, 'ochair')
-- A foreign key constraint violation is detected, and the update fails.
declare @source table 
   (name nchar(30), pno int, pAlternateKey nchar(30));
insert into @source values('Office Chair2',1,'oxx');

merge into product
using @source as src
on product.pno = src.pno
when matched then
   update set product.pAlternateKey = src.pAlternateKey, 
              product.name = src.name
when not matched then
   insert values(src.pno, src.name, src.pAlternateKey);

Status

Microsoft heeft bevestigd dat dit probleem in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op' is.

Meer informatie

Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie over welke bestanden worden gewijzigd en voor informatie over de vereisten voor het toepassen van het cumulatieve updatepakket bevat de hotfix die wordt beschreven in dit Microsoft Knowledge Base-artikel:
956717  (http://support.microsoft.com/kb/956717/LN/ ) Cumulatieve updatepakket 1 voor SQL Server 2008

Referenties

Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie over de lijst van builds die beschikbaar na de release van SQL Server 2008 zijn:
956909  (http://support.microsoft.com/kb/956909/ ) SQL Server 2008 bouwt die zijn uitgebracht nadat SQL Server 2008 is uitgebracht.


Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie over de incrementele Servicing-Model voor SQL Server:
935897  (http://support.microsoft.com/kb/935897/ ) Een incrementele Servicing-Model is beschikbaar vanaf de SQL Server-team leveren hotfixes voor gemelde problemen


Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie over het naamgevingsschema voor SQL Server-updates:
822499  (http://support.microsoft.com/kb/822499/ ) Nieuw naamgevingsschema voor software-updatepakketten voor Microsoft SQL Server


Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie over terminologie voor software-update:
824684  (http://support.microsoft.com/kb/824684/ ) Beschrijving van de standaardterminologie die wordt gebruikt om software-updates voor Microsoft te beschrijven

Referenties

Bezoek de volgende website van Microsoft Developer Network (MSDN) voor meer informatie over niet-geclusterde indexen in SQL Server 2008:
http://msdn.Microsoft.com/en-us/library/ms179325 (SQL.100) .aspx (http://msdn.microsoft.com/en-us/library/ms179325(SQL.100).aspx)

De informatie in dit artikel is van toepassing op:
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Standard Edition for Small Business
  • Microsoft SQL Server 2008 Web
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 Express
  • Microsoft SQL Server 2008 Express with Advanced Services
Trefwoorden: 
kbautohotfix kbhotfixserver kbqfe kbPubTypeKC kbfix kbmt KB956718 KbMtnl
Machine-translated ArticleMachine-translated Article
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:956718  (http://support.microsoft.com/kb/956718/en-us/ )
Delen
Extra ondersteuningsopties
Microsoft Community Support-forums
Neem rechtstreeks contact met ons op
Een door Microsoft gecertificeerde partner zoeken
Microsoft Store