Функция за извличане на идентификационни стойности в 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
|