Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 11405|Відповідь: 0

[Чайови] SQL отримує основне значення ключа після очікування INSERT

[Копіювати посилання]
Опубліковано 05.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 ВИБРАТИ 1   
  ЮНІОН ALL SELECT 2   
  CREATE TABLE t2(id int IDENTITY, col int)   
  ІДИ   
   
  СТВОРИТИ ТРИГЕРНИЙ TR_insert_t2 НА T2   
  ДЛЯ ВСТАВКИ   
  AS   
          ВСТАВИТИ T1 ВИБРАТИ 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