|
|
Опубліковано 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?
|