Düzeltme: BIR BIRLEŞTIRME deyimini yabancı anahtar kısıtlamasını ifade, bir küme anahtarının bir parçası olan benzersiz bir anahtar sütunu güncelleştirir başlattığımda tek bir satır güncelleştirme kaynağı olarak SQL Server 2008'de, zorla.

Makale çevirileri Makale çevirileri
Makale numarası: 956718 - Bu makalenin geçerli olduğu ürünleri görün.
# Hata: 50003167 (SQL düzeltmesi)
SQL yayımlandıktan sonra yayımlanan yap?lar ana listeyle ilgili daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
957826SQL Server 2008 hakkında daha fazla bilgi bulabileceğiniz bir yerde sonra SQL Server 2008'de yayımlanan oluşturur ve SQL Server 2005'in, sonra SQL Server 2005 Service Pack 2'de yayımlanan oluşturur.
Hepsini aç | Hepsini kapa

Belirtiler

Aşağıdaki koşullar doğruysa Microsoft SQL Server 2008'de, yabancı anahtar kısıtlamasını yürütülebilmesi değil:
  • BIRLEŞTIRME bir deyim tarafından verilir.
  • Kümelenmemiş bir benzersiz dizin güncelleştirmesi hedef sütun var.
Şu senaryoyu inceleyin. Ifade, Column1Table1 adlı bir tablo adı benzersiz bir sütunu güncelleştirir. Table1Table2 adlı bir tablodaki yabancı anahtar kısıtlaması tarafından başvurulmaktadır.

Bunlar değil verilmiş olması, Table1 satır değiştirilen sonucudur. Ayrıca, Table2Table1 sallantıda başvuruları olan bir satır olacaktır.

Bu senaryo için bu sorun, aşağıdaki koşullar geçerli olduğunda oluşur:
  • Başvurulan Column1 sütununda Table1Table1 kümeleme anahtarının bir parçası değil.
  • Yalnızca bir olası değer sütunu Column1 atanabilir. Örneğin, aşağıdaki senaryolardan biri oluşur:
    • Birleştirme verileri tek bir satır kaynağıdır. Örneğin, mektup birleştirme kaynağı seçin a?a??daki biridir:
      • select <ConstantValues>
      • select <Parameters>
      Not Bu senaryoda, en olası senaryoda ' dir.
    • Birleştirme gerçekte tek bir satır veri kaynağıdır. Örneğin, mektup birleştirme kaynağı seçin a?a??daki biridir:
      • select <ColumnName> from <TableName> where <TableName>.<ColumnName> = 1
        Not<TableName>. <ColumnName> benzersiz bir değeri olması sorgu en iyi duruma getiricisi tarafından bilinir.
      • select top 1 <ColumnName> from <TableName>
    • Mektup Birleştirme kaynağı birleştirme hedef arasındaki birleşim, tek bir satır güncelleştirilmesine garantileyen bir yüklemi vardır.
    • Güncelleştirme yan tümcesi birleştirme kaynak bağımsız olarak sabit bir değer sütunu Column1 ayarlar.
  • On Update Cascade seçeneği Table2, yabancı anahtar kısıtlamasını etkinleştirilmedi.
Not Yabancı anahtar kısıtlamaları başvurulan kümelenmemiş benzersiz dizinleri devre dışı olan bir sütunu güncelleştirmek için BIRLEŞTIRME deyimini kullanırsanız, bu düzeltmeyi uygulamanız önerilir.

Çözüm

Bu sorunla ilgili düzeltme, ilk toplu güncelleştirme 1'de yayımlanmıştır. SQL Server 2008 için bu toplu güncelleştirme paketini elde etme hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
956717SQL Server 2008 için güncelleştirme paketi 1
Not Yap?lar birikimli olduğu için her yeni düzeltme yayımlanan tüm düzeltmeleri içerir ve sürüm önceki SQL Server 2008'in içerdiği tüm güvenlik düzeltmelerini düzeltin. Bu düzeltmeyi içeren en son düzeltme sürümü uygulama ele almanızı öneririz. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
956909SQL Server 2008, SQL Server 2008'de yayımlandıktan sonra yayımlanan oluşturur

Pratik Çözüm

Düzeltme paketini sorunu ortadan kaldırır. BIRLEŞTIRME ifadesi "Belirtiler" bölümünde anlatılan senaryosunda kullanıyorsanız ve düzeltme uygulamamayı seçerseniz, bu sorunu gidermek için şu adımları izleyin:
  1. Değerleri birleştirme kaynağı için bir tablo, geçici bir tablo veya içindeki-sorguda çizgili yerine tablo değişkeni olan BIRLEŞTIRME deyimini yeniden yazın.
  2. Izleme bayrağı 8790 kullanın. Bu izleme bayrağının bir tür adı verilen bir geniş güncelleştirme planı plan kullanmak için en iyi duruma getiricisi zorlar. Geniş bir güncelleştirme planları sorun yok. Bu adım, tüm DML deyimlerini performans riskleri taşır. Bu nedenle, uygulama değiştirmek mümkün değilse, bu adımı kullanarak kaçınmanız gerekir.
Aşağıdaki Transact-SQL komut dosyası, bu düzeltmeyi yükleyemezseniz, bu sorunu gidermek için komut dosyanızı değiştirmek için bir yol gösterir.

Örneğin, aşağıdakine benzer bir komut dosyası sahip:
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);
, aşağıdakine benzer şekilde, komut dosyası Değiştir:
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);

Durum

Microsoft, "Geçerli Olduğu Ürünler" bölümünde listelenen Microsoft ürünlerinde bu sorunun olduğunu onaylamıştır.

Daha fazla bilgi

Hangi dosyalar değiştirilir hakkında daha fazla bilgi ve bu Microsoft Bilgi Bankası makalesinde açıklanan düzeltmeyi içeren bir toplu güncelleştirme paketini uygulamak için Önkoşullar hakkında bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
956717SQL Server 2008 için güncelleştirme paketi 1

Referanslar

SQL Server 2008'in yayımlanmasından sonra kullanılabilen yap?lar listesi hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
956909SQL Server 2008, SQL Server 2008'de yayımlandıktan sonra yayımlanan oluşturur


SQL Server için artımlı hizmet modeli hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
935897SQL Server ekibinden bildirilen sorunlar için düzeltmeler ulaştırmak için artımlı bir hizmet modeli kullanılabilir


SQL Server güncelleştirmelerinin adlandırma şeması hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
822499Microsoft SQL Server yazılım güncelleştirme paketlerinin yeni adlandırma şeması


Yazılım güncelleştirme terminolojisi hakkında daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
824684Microsoft yazılım güncelleştirmelerini açıklamak için kullanılan standart terminolojinin açıklaması

Referanslar

SQL Server 2008'deki kümelenmemiş dizin hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
http://msdn.microsoft.com/en-us/library/ms179325(SQL.100).aspx

Özellikler

Makale numarası: 956718 - Last Review: 19 Eylül 2008 Cuma - Gözden geçirme: 4.0
Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbmt kbautohotfix kbhotfixserver kbqfe kbpubtypekc kbfix KB956718 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:956718

Geri Bildirim Ver

 

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