Oprava: Prohlášení KORESPONDENCE pravděpodobně není vynutit omezení cizího klíče při výpisu aktualizuje jedinečný klíčový sloupec, který není součástí clustering klíče a je jediný řádek jako zdroj aktualizace SQL Server 2008

Překlady článku Překlady článku
ID článku: 956718 - Produkty, které se vztahují k tomuto článku.
Chyba č: 50003167 (SQL Hotfix)
Další informace o hlavní seznam sestavení, které byly vydány po vydání SQL klepněte na následující číslo článku databáze Microsoft Knowledge Base:
957826Kde najít informace o produktu SQL Server 2008 sestavení, které byly vydány po SQL Server 2008 a SQL Server 2005 vytvoří, které byly vydány po SQL Server 2005 Service Pack 2
Rozbalit všechny záložky | Minimalizovat všechny záložky

Příznaky

V Microsoft SQL Server 2008 omezení cizího klíče může není vynucena když jsou splněny následující podmínky:
  • KORESPONDENCE příkaz vydán.
  • Cílový sloupec aktualizace má nonclustered jedinečný index.
Předpokládejme následující situaci. Příkaz aktualizuje jedinečný sloupec s názvem Column1 tabulku s názvem Table1. Table1 odkazuje omezení cizího klíče z tabulky s názvem Table2.

Výsledkem je, že jsou při jejich měli není byly změněny řádky Table1. Navíc Table2 bude mít řádky mít dangling odkazy Table1.

K tomuto problému dochází v tomto scénáři, pokud jsou splněny následující podmínky:
  • Odkazovaný sloupec Column1 v Table1 není součástí clustering klíče Table1.
  • Sloupec Column1 lze přiřadit pouze jednu možnou hodnotu. Například dojde k jedné z následujících scénářů:
    • Zdroj sloučení je jeden řádek dat. Zdroj sloučení je například z následujících tvrzení vyberte:
      • select <ConstantValues>
      • select <Parameters>
      Poznámka: Tento scénář je nejpravděpodobnější scénář.
    • Zdroj sloučení je skutečně jediný řádek dat. Zdroj sloučení je například z následujících tvrzení vyberte:
      • select <ColumnName> from <TableName> where <TableName>.<ColumnName> = 1
        Poznámka:<TableName>. <ColumnName> známé optimalizátorem dotazů být jedinečnou hodnotu.
      • select top 1 <ColumnName> from <TableName>
    • Spojení mezi zdroji korespondence a sloučení cílové má predikát zaručuje, že budou aktualizovány na jednom řádku.
    • Klauzule aktualizace nastaví sloupec Column1 konstantní hodnotu bez ohledu na zdroj sloučení.
  • Možnost Na sebe aktualizace není povolena na omezení cizího klíče v Table2.
Poznámka: Doporučujeme nainstalovat tuto opravu hotfix, pokud pomocí příkazu SLOUČENÍ aktualizovat sloupce, které mají nonclustered jedinečné indexy, na které odkazuje omezení cizího klíče.

Řešení

Oprava tohoto problému byla vydána nejprve v kumulativní aktualizaci 1. Další informace o získání tohoto balíčku kumulativní aktualizace pro SQL Server 2008 klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
956717Balíček kumulativní aktualizace 1 pro SQL Server 2008
Poznámka: Protože jsou kumulativní sestavení, každé nové verzi oprava obsahuje všechny opravy hotfix a opravte všechny opravy zabezpečení, které byly součástí předchozí SQL Server 2008 vydání. Doporučujeme zvážit použití nejnovější vydání oprava, která obsahuje tuto opravu hotfix. Další informace naleznete následujícím článku znalostní databáze Microsoft Knowledge Base:
956909Sestaví SQL Server 2008, které byly vydány po vydání SQL Server 2008

Jak potíže obejít

Balíček opravy hotfix eliminuje problém. Pokud pomocí příkazu hromadné KORESPONDENCE v situaci popsané v části "Příznaky" a pokud zvolíte instalaci opravy hotfix, vyloučit tento problém takto:
  1. Doplňte příkazu hromadné KORESPONDENCE, takže hodnoty zdroj korespondence jsou v tabulce, temp tabulku nebo tabulky proměnné namísto právě s v linkou v dotazu.
  2. Použít příznak trasování 8790. Tento příznak trasování vynutí Optimalizátor použít typ plánu, který se nazývá široký aktualizace plánu. Široký aktualizace plány nemají potíže. Tento krok provede výkonu rizik pro všechny výkazy DML. Neměli byste tedy pomocí tohoto kroku, pokud je nemožné změnit aplikaci.
Následující skript Transact-SQL ukazuje jeden způsob, jak změnit skript Chcete-li tento problém vyřešit, pokud nelze použít tuto opravu hotfix.

Například máte skript podobná následující:
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);
skript změnit tak, aby se podobá následující:
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);

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.

Další informace

Další informace o změně jaké soubory a informace o všech předpokladech použít balíček kumulativní aktualizaci obsahující opravu hotfix popsanou v tomto článku znalostní báze Knowledge Base klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
956717Balíček kumulativní aktualizace 1 pro SQL Server 2008

Odkazy

Další informace o seznamu sestavení, které jsou k dispozici po vydání SQL Server 2008 klepnutím na následující číslo článku databáze Microsoft Knowledge Base:
956909Sestaví SQL Server 2008, které byly vydány po vydání SQL Server 2008


Další informace o modelu přírůstkové Servicing pro SQL Server klepněte na následující číslo článku databáze Microsoft Knowledge Base:
935897Přírůstkové Model Servicing je k dispozici z týmu SQL Server doručit opravy hotfix pro nahlášené potíže


Další informace o pojmenování schématu aktualizace SQL Server klepněte na následující číslo článku databáze Microsoft Knowledge Base:
822499Nové schéma přidělování názvů pro balíčky aktualizací softwaru Microsoft SQL Server


Další informace o terminologii používané v aktualizacích softwaru naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
824684Popis standardní terminologie používané při popisu aktualizací softwaru společnosti Microsoft

Odkazy

Další informace o nonclustered indexy SQL Server 2008 na webu Microsoft Developer Network (MSDN):
http://msdn.microsoft.com/en-us/library/ms179325(SQL.100).aspx

Vlastnosti

ID článku: 956718 - Poslední aktualizace: 19. září 2008 - Revize: 4.0
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbmt kbautohotfix kbhotfixserver kbqfe kbpubtypekc kbfix KB956718 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:956718

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com