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

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

[İpucu] sql, INSERT bekledikten sonra birincil anahtar değerini alır

[Bağlantıyı kopyala]
Yayınlandı 5.05.2015 17:35:51 | | |

SQL SERVER 2000'de tanımlama değeri getirme fonksiyonu     
  SQL Server 2000'de kimlik sütunu IDENTITY ile tanımlanır ve aşağıdaki durum son eklenen kaydın kimlik değerini almakla ilgilidir   
   
  Kapalı fonksiyonunun örnek bir örneği     
   
          SQL Server'da SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() kullanarak son eklenen kaydın değerini alabilirsiniz ve aralarındaki fark şudur:   
  SCOPE_IDENTITY() aynı kapsamda IDENTITY sütununa eklenen son IDENTITY değerini döndürür. Bir kapsam, bir modüldür - saklanan prosedürler, tetikleyiciler, fonksiyonlar   
   
  Sayılar veya partiler. Bu nedenle, iki ifade aynı depolanmış prosedürde, fonksiyonda veya toplu sistemde ise, aynı kapsamdadırlar.   
  @@IDENTITY Mevcut oturumdaki tüm tablolarda oluşturulan son tanımlama değerini döndürür   
  IDENT_CURRENT() herhangi bir oturumda ve herhangi bir kapsamda belirtilen tablo için oluşturulan son tanımlama değerini döndürür   
  İşte farklılıklarını göstermek için bir örnek     
   
  -- a) Örnek kod     
  --   ===========================================   
  -- Bir test tablosu oluşturun   
  --   ===========================================   
  TEMPDB KULLANIN   
  GIT   
   
  CREATE TABLE t1(id int IDENTITY,col int)   
  INSERT t1 SELECT 1   
  UNION ALL SELECT 2   
  CREATE TABLE t2(id int IDENTITY,col int)   
  GIT   
   
  T2'DE TETIKLEYICI TR_insert_t2 OLUŞTUR   
  INSERT IÇIN   
  AS   
          T1 SEÇ 3 EKLE   
  GIT     
   
  --   ===========================================   
  -- Üç işlevi test et: 1   
  --   ===========================================   
  T2 DEĞERLERI GIRIN(1)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() t2 için]=IDENT_CURRENT(N't2')   
   
  /*--Sonuç   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 için IDENT_CURRENT() t2 için                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Etkilenen satır sayısı 1 satırdır)   
  --*/   
  GIT   
   
  --   ===========================================   
  -- Üç işlevi test et: 2   
  --   ===========================================   
  T1 DEĞERLERI (10) GIRIN   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() t2 için]=IDENT_CURRENT(N't2')   
   
  /*--Sonuç   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 için IDENT_CURRENT() t2 için                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Etkilenen satır sayısı 1 satırdır)   
  --*/   
  GIT   
   
  --   ===========================================   
  -- Üç işlevi test et: 3   
  -- ** Yeni bir bağlantı açın ve aşağıdaki kodu çalıştırın **   
  --   ===========================================   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() t2 için]=IDENT_CURRENT(N't2')   
   
  /*--Sonuç   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() t1 için IDENT_CURRENT() t2 için                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 &n     
   
  --===========================================   
  -- Test ortamını sil   
  --   ===========================================   
  TABLOYU DÜŞÜR t1,t2     
   
  -- b) Kod sonucu tanımı     
  Yukarıdaki koddan da görebileceğiniz gibi:   
  IDENT_CURRENT() her zaman belirtilen tabloda en son tanımlanmış değeri döndürür   
  @@IDENTITY Mevcut oturumun kimlik değerini döndürür, aynı kapsamda olsun ya da olmasın, testler 1 ve 2'de, tetikleyicide eklenen kaydın kimlik değerini döndürdüğü görülebilir ve   
   
  Test 3'te, mevcut oturumda ekleme kaydı olmadığı için NULL döner.   
  SCOPE_IDENTITY() mevcut oturumun aynı kapsamının tanımlama değerini döndürür, yani test 1, 2'de tetikleyiciden etkilenmeyen değeri döndürür, test 3'te ise mevcut oturum interpolasyon edilmediği için   
   
  kayıt, bu yüzden NULL döner.





Önceki:Neden herkes Mayıs tatiline gitti?
Önümüzdeki:SCOPE_IDENTITY()'nin t-sql'de önce ve sonra yazılması arasındaki fark nedir?
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