Ö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.
Ş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ı
Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır
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