Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 12386|Yanıt: 0

[Kaynak] SqlServer, yeni eklenen kaydın kimliğini uygular

[Bağlantıyı kopyala]
Yayınlandı 15.06.2016 11:45:40 | | |

Kaynak: İnternet Yazarı: Bilinmiyor

- Veritabanları ve tablolar oluşturun

veritabanı MyDataBase oluştur

MyDataBase kullanın

Tablo MyTable oluştur

id int identity(1,1),

Adı varchar(20)



--Bu SQL'i çalıştırarak yeni eklenen kayda karşılık gelen kendi kendine artan sütunun değerini öğrenin

mytable değerlerine ekle ('Li Si')

Select @@identity

2. Üç yöntemin karşılaştırması

SQL Server 2000'de üç benzer özellik vardır: SCOPE_IDENTITY, IDENT_CURRENT ve @@IDENTITY; bunların hepsi IDENTITY sütununa eklenen değerleri döndürür.

IDENT_CURRENT Herhangi bir oturumda ve herhangi bir kapsamda belirli bir tablo için oluşturulan son tanımlama değerini döndürür. IDENT_CURRENT Kapsam ve oturumla sınırlı değil, belirli bir tabloyla sınırlıdır. IDENT_CURRENT Herhangi bir oturum ve kapsamda belirli bir tablo için oluşturulan değeri döndürür.

@@IDENTITY Mevcut oturumun tüm kapsamlarında herhangi bir tablo için oluşturulan son tanımlama değerini döndürür.

SCOPE_IDENTITY Mevcut oturum için oluşturulan son tanımlanmış değeri ve mevcut kapsamdaki herhangi bir tabloyu döndürür

SCOPE_IDENTITY ve @@IDENTITY, mevcut oturumda herhangi bir tabloda oluşturulan son tanımlama değerini döndürür. Ancak SCOPE_IDENTITY yalnızca mevcut kapsama girilen değerleri döndürür; @@IDENTITY Belirli bir kapsamla sınırlı değil.

Örneğin, INSERT tetikleyicisinin tanımlandığı iki tablo vardır: T1 ve T2. T1'e bir satır eklendiğinde, tetikleyici tetiklenir ve T2'ye bir satır eklenir. Bu örnek, tetikleyicinin sonucu olarak biri T1'de, diğeri ise T2'de iki dürbünü gösterir.

T1 ve T2'nin IDENTITY sütunlarına sahip olduğunu varsayarsak, @@IDENTITY ve SCOPE_IDENTITY T1'deki INSERT ifadesinin sonunda farklı değerler döndürecektir.

@@IDENTITY Mevcut oturumda herhangi bir kapsama eklenen son IDENTITY sütun değerini döndürür; bu değer T2'ye eklenen değerdir.

SCOPE_IDENTITY() aynı kapsamda gerçekleşen son INSERT olan T1'e girilen IDENTITY değerini döndürür. Eğer SCOPE_IDENTITY() fonksiyonu, kapsamda kimlik sütununa ekleme ifadesi gerçekleşmeden önce çağrılırsa, fonksiyon NULL değeri döndürür.

IDENT_CURRENT('T1') ve IDENT_CURRENT('T2') tarafından döndürülen değerler, sırasıyla iki tablonun son kendi kendine artan değerleridir.

ajqc'nin deneyi: (40 yerel iş parçacığı, 40+40 uzak iş parçacığı eşzamanlı test, 1200W satır eklenerek), sonuç şudur:

1. Tipik kaskad uygulamalarda. @@IDENTITY kullanılamaz ve CII850, 256M SD makinelerde 1W çok satırlı olduğunda eşzamanlı çatışmalar meydana gelir. P42.8C ve 512M DDR'de, sadece 6000'den fazla hat olduğunda eşzamanlı bir çatışma yaşanır.

2.SCOPE_IDENTITY() kesinlikle güvenilirdir ve depolama sürecinde kullanılabilir, tetikleyicilerin bile oluşturulmasına gerek yoktur ve eşzamanlı çatışmalar yoktur

SELECT IDENT_CURRENT('TableName') - Belirlenen tabloda oluşturulan son etiket değerini döndürür

SELECT IDENT_INCR('TableName') - belirtilen tablo için işaretlenmiş alan artış değerini döndürür

SELECT IDENT_SEED('TableName') - belirtilen tablonun işaretlenmiş alan tohum değerini döndürür

Son eklenen kaydın otomatik numarasını döndürür

SELECT IDENT_CURRENT('TableName')

Bir sonraki otomatik sayıya geri dön:

SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))

SELECT @@IDENTITY - Mevcut oturumda tüm tablolarda oluşturulan son işaretlenmiş değeri döndürer








Önceki:SQLServer, dizileri bölmek için evrensel yöntemi uygular
Önümüzdeki:Faydalı bir arama artefaktını paylaşın
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com