Microsoft Data Access Components 2.8'in yüklü olduğu bir bilgisayarda bir uygulama SQL Server 2005 veritabanından kimlik sütunu için hatalı değer alıyor

Makale çevirileri Makale çevirileri
Makale numarası: 940569 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Belirtiler

Şu senaryoyu inceleyin. Bir Microsoft SQL Server 2005 veritabanında kimlik sütunu olan bir tablo oluşturmuş olursunuz. Bir birleştirme çoğaltması, tablo üzerinde yapılandırın. Bir uygulama, tabloda bir satır eklemek için Microsoft ActiveX Data Objects (ADO) kullanır. Ardından, uygulamanın eklenen satıra alır. Ancak, kimlik sütunu için hatalı bir değer verir.

Bu sorun, uygulamayı çalıştıran bilgisayarın aşağıdakilerden biri yüklü olduğunda oluşur:
  • Windows Server 2003
  • WINDOWS XP
  • Microsoft Data Access Components 2.8 (MDAC 2.8)
Bu sorun, bir Microsoft SQL Server 2000 veritabanında oluşmaz.

Neden

Çoğaltma işlemi, tabloda ekleme Tetikleyicileri oluşturur. Ekleme Tetikleyicileri, tabloya veri eklendiğinde, @@ IDENTITY kullanmakSCOPE_IDENTITY işlevi yerine değişken. Bu nedenle, @@ KIMLIĞINI değişkeni, geçerli tabloda bulunmayan bir kimlik değeri verebilir.

Çözüm

Bu sorunu gidermek için <a0></a0>, aşağıdaki Microsoft Bilgi Bankası makalesinde açıklanan düzeltmeyi yükleyin:
961451Düzeltme: ActiveX Data Objects kullanan bir uygulama, kimlik sütunu içeren bir tabloya veri eklemek için bir istemci tarafı imleci kullandıktan sonra son eklenen kimlik değerini sorguladığınızda yanlış bir değer alıyorsunuz
Not Önceki sürümü, bu makalenin "Çözüm" bölümünde açıklanan düzeltmeyi 961451'de anlatılan düzeltmeyi tarafından kullanılmaktadır.

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

SCOPE_IDENTITY işlevi ve @@ IDENTITY değişkeni geçerli oturumda oluşan herhangi bir tabloda son kimlik değerleri döndürür. Ancak, SCOPE_IDENTITY işlevi, yalnızca geçerli kapsamdaki eklenen değerleri döndürür. @@ IDENTITY değişken için belirli bir kapsam ekleme sınırlamaz.

Örneğin, veritabanının bir Table1 ve bir Table2 içerdiğini varsayalım. Her iki tablonun kimlik sütunu vardır. Bir ekleme tetikleyicisi Table1 içinde tanımlanır. Tetikleyici Table1 içinde bir satır eklediğinizde, Table2, satırın bir kopyasını ekler. Bu senaryoda, aşağıdaki iki kapsamları içerir:
  • Table1, ekleme
  • Tetikleyici tarafından Table2, ekleme
Bu senaryoda, @@ IDENTITY satır içinde Table1 eklendiğinde, değişken ve SCOPE_IDENTITY işlevi farklı değerler döndürür. @@ IDENTITY değişkeni, tüm kapsamları arasında geçerli oturumda eklenen en son kimlik sütun değerini verir. Bu durumda, @@ IDENTITY değişken Table2 eklenen kimlik değerini verir. Ancak, SCOPE_IDENTITY işlev aynı kapsam içinde en son eklenen değerini verir, çünkü SCOPE_IDENTITY işlevi Table1, eklenen kimlik değerini döndürür. Işlev çağrıldığında, kimlik sütunu için yapılan herhangi bir INSERT deyimleri kapsamda gerçekleşmeden önce SCOPE_IDENTITY işlevini NULL değeri döndürür.

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ı

Özellikler

Makale numarası: 940569 - Last Review: 25 Ağustos 2009 Salı - Gözden geçirme: 2.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Web Edition
  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows Server 2003, Standard x64 Edition
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional x64 Edition
  • Microsoft Data Access Components 2.8
Anahtar Kelimeler: 
kbmt kbautohotfix kbwinxppresp3fix kbexpertiseinter kbwinserv2003postsp2fix kbbug kbfix kbhotfixserver kbqfe KB940569 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:940569

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