Düzeltme: Güncelleştirme, kendi kendine birleşim ile hatalı bir satır sayısını güncelleştirme

Ö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.

285870
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
# HATA: 101111 (SQLBUG_70)
# Hata: 351761 (SHILOH_bugs)
Belirtiler
Aşağıdaki koşullar yerine getirilirse bir UPDATE işlemi doğru satır sayısını değiştirme:
  • Sorgunuz bir sütun, ColA, bir tablodan TabA güncelleştirir.
  • Sorgu TabA TabB diğer adı kullanarak yeniden başvuruyor.
  • Bir sorgudaki herhangi bir yeri TabB.ColA başvuru yok.
  • Sütunların içinde TabA güncelleştirilmekte hiçbiri, dizinlenmiş sütunların değildir.
  • Karma veya birleştirme bir birleşimi kullanılır.
Neden
Cadılar Bayramı koruma sağlamak gerekli olan UPDATE işletmen aşağıda gerekli bir tablo biriktirme Sorgu planını içerebilir.
Çözüm

SQL Server 2000

Bu sorunu gidermek için <a0></a0>, Microsoft SQL Server 2000 için en son hizmet paketini edinin. Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
290211BILGI: en son SQL Server 2000 hizmet paketi nasıl elde edilir

SQL Server 7.0

Bu sorunu gidermek için <a0></a0>, Microsoft SQL Server 7.0 için en son hizmet paketini edinin. Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
301511BILGI: en son SQL Server 7.0 hizmet paketi nasıl elde edilir


Not: aşağıdaki düzeltmeyi Microsoft SQL Server 7.0 Service Pack 4 öncesinde oluşturulmuş.

Bu düzeltmenin ingilizce sürümünde aşağıdaki dosya öznitelikleri olmalı veya daha yenisi:
   Version      File name       Platform   -------------------------------------   7.00.978     s70978i.exe     x86   7.00.978     s70978a.exe     Alpha				
Not: Dosya bağımlılıkları nedeniyle, en son düzeltme veya özellik, yukarıdaki dosyaları içeren ek dosyalar da içerebilir.
Pratik Çözüm
Bu soruna geçici bir çözüm bulmak için <a0></a0>:
  • <a1>Seçenek</a1> ('LOOP [NULL]'JOıN) kullanarak bir döngü birleştirme zorla.

    -VEYA-

  • Dizin üzerinde güncelleştirilmiş sütunları ekleyin.
Durum
Microsoft, bu makalenin başında listelenen Microsoft ürünlerinde bir sorun olduğunu onaylamıştır.

SQL Server 2000
Bu sorun ilk olarak SQL Server 2000 Service Pack 1'de giderilmiştir.

SQL Server 7.0
Bu sorun ilk olarak Microsoft SQL Server 7.0 Service Pack 4'de giderilmiştir.
Daha fazla bilgi
Cadılar Bayramı koruma, burada bir tablo içinde bir satırın bir fiziksel konumunu, UPDATE işlemi nedeniyle değişiklikleri bir durumu önlemek için gereklidir. Sonuç olarak, aynı satıra birden çok kez gerçekleşmesi tek bir mantıksal işlem bağlamında revisited. Bu belirli bir hata ile ilgili koşulları karşılanırsa, SQL Server iyileştirici bir uygun Cadılar Bayramı koruma planı oluşturmak değil.

Sorun aşağıdaki örnekte gösterilmiştir:
set nocount oncreate table test(id int, pid int, fn varchar(256), rn varchar(8))godeclare @c intset @c = 1insert into test values(0, NULL, 'root', 'root')while @c < 10begin   insert into test values(@c, @c-1, NULL, cast(@c as varchar(8)))   set @c = @c + 1endcreate unique clustered index idx_c_id on test(id)goupdate testset fn = parent.fn + '/' + test.rnfrom test(index=0) , test parent(index=0)where test.pid = parent.id and test.fn is NULL --  and parent.fn <> ''option(hash join,force order)				
burada olan tablonun içeriğini doğru güncelleştirmesinden sonra:

--DOĞRU sonuçlar:
id          pid         rn       fn                                                                                                                                                                                                                                                               ----------- ----------- -------- ---- 0           NULL        root     root1           0           1        root/1				
burada düzeltmeyi uygulamadan önce elde sonuçları şunlardır:

--HATALı sonuçlar:
id          pid         rn       fn                                                                                                                                                                                                                                                               ----------- ----------- -------- ----0           NULL        root     root1           0           1        root/12           1           2        root/1/23           2           3        root/1/2/34           3           4        root/1/2/3/45           4           5        root/1/2/3/4/56           5           6        root/1/2/3/4/5/67           6           7        root/1/2/3/4/5/6/78           7           8        root/1/2/3/4/5/6/7/89           8           9        root/1/2/3/4/5/6/7/8/9				

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 285870 - Son İnceleme: 01/16/2015 21:26:08 - Düzeltme: 3.1

  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • kbnosurvey kbarchive kbmt kbbug kbfix KB285870 KbMttr
Geri bildirim