Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 11405|Отговор: 0

[Бакшиши] SQL получава основната стойност на ключа след изчакване на INSERT

[Копирай линк]
Публикувано в 5.05.2015 г. 17:35:51 ч. | | |

Функция за извличане на идентификационни стойности в SQL SERVER 2000     
  В SQL Server 2000 колоната за идентичност е дефинирана чрез IDENTITY, а следното е свързано с получаването на стойността на идентичността на последния вмъкнат запис   
   
  Пример за илюстрация на функцията на off     
   
          В SQL Server можете да използвате SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT(), за да получите стойността на последния вмъкнат запис, а разликата между тях е:   
  SCOPE_IDENTITY() връща последната стойност IDENTITY, вмъкната в колоната IDENTITY в същия обхват. Обхватът е модул – съхранени процедури, тригери, функции   
   
  Номера или партиди. Следователно, ако две оператора са в една и съща съхранена процедура, функция или партида, те са в един и същ обхват.   
  @@IDENTITY Връща последната идентификационна стойност, генерирана във всички таблици в текущата сесия   
  IDENT_CURRENT() връща последната идентификационна стойност, генерирана за посочената таблица във всяка сесия и във всеки обхват   
  Ето пример, който илюстрира техните различия     
   
  -- a) Примерен код     
  --   ===========================================   
  -- Създаване на тестова таблица   
  --   ===========================================   
  ИЗПОЛЗВАЙТЕ tempdb   
  ВЪРВИ   
   
  CREATE TABLE t1(id int IDENTITY, col int)   
  ВМЪКНЕТЕ T1 SELECT 1   
  СЪЮЗ ВСИЧКИ ИЗБРАНИ 2   
  CREATE TABLE t2(id int IDENTITY, col int)   
  ВЪРВИ   
   
  СЪЗДАЙ TR_insert_t2 ТРИГЕР НА T2   
  ЗА ВМЪКВАНЕ   
  AS   
          ВМЪКНЕТЕ T1 SELECT 3   
  ВЪРВИ     
   
  --   ===========================================   
  -- Тествайте три функции: 1   
  --   ===========================================   
  ВМЪКНЕТЕ T2 СТОЙНОСТИ(1)   
  ИЗБЕРЕТЕ [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() За t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() За t2]=IDENT_CURRENT(N't2')   
   
  /*--Резултат   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() За t1 IDENT_CURRENT() За t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Броят на засегнатите редове е 1 ред)   
  --*/   
  ВЪРВИ   
   
  --   ===========================================   
  -- Тествайте три функции: 2   
  --   ===========================================   
  ВМЪКНЕТЕ T1 СТОЙНОСТИ(10)   
  ИЗБЕРЕТЕ [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() За t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() За t2]=IDENT_CURRENT(N't2')   
   
  /*--Резултат   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() За t1 IDENT_CURRENT() За t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Броят на засегнатите редове е 1 ред)   
  --*/   
  ВЪРВИ   
   
  --   ===========================================   
  -- Тествайте три функции: 3   
  -- ** Отворете нова връзка и изпълнете следния код **   
  --   ===========================================   
  ИЗБЕРЕТЕ [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() За t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() За t2]=IDENT_CURRENT(N't2')   
   
  /*--Резултат   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() За t1 IDENT_CURRENT() За t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 &n     
   
  --===========================================   
  -- Изтриване на тестовата среда   
  --   ===========================================   
  ТАБЛИЦА ЗА ПУСКАНЕ T1,T2     
   
  -- b) Описание на резултата от кода     
  Както можете да видите от кода по-горе:   
  IDENT_CURRENT() винаги връща последната идентифицирана стойност, вмъкната в посочената таблица   
  @@IDENTITY Връща идентичностната стойност на текущата сесия, независимо дали е в същия обхват или не, в тестове 1 и 2 се вижда, че връща идентичността на вмъкнатия запис в тригъра, и в   
   
  В Тест 3 NULL се връща, защото няма запис за вмъкване в текущата сесия   
  SCOPE_IDENTITY() връща идентификационната стойност на същия обхват на текущата сесия, така че в тест 1, 2 връща стойността, която не е засегната от тригъра, а в тест 3, тъй като текущата сесия не е интерполирана   
   
  запис, така че връща NULL





Предишен:Защо всички отидоха на празника Първи май?
Следващ:Каква е разликата между това SCOPE_IDENTITY() да се пише преди и след това в t-sql?
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com