Джерело: Інтернет Автор: невідомо
- Створення баз даних і таблиць
створити базу даних MyDataBase
використовуйте MyDataBase
Створити таблицю mytable
id int ідентичність(1,1),
Ім'я Варшар (20)
)
--Виконати цей SQL, щоб дізнатися значення самоінкрементального стовпця, що відповідає запису, який щойно був вставлений.
вставити у mytable значення ('Li Si')
вибрати @@identity
2. Порівняння трьох методів
У SQL Server 2000 є три схожі функції: SCOPE_IDENTITY, IDENT_CURRENT та @@IDENTITY, усі з яких повертають значення, вставлені у стовпець IDENTITY.
IDENT_CURRENT Повертає останнє ідентифікаційне значення, згенероване для конкретної таблиці в будь-якій сесії та в будь-якому діапазоні. IDENT_CURRENT Не обмежений обсягом і сесією, а визначеною таблицею. IDENT_CURRENT Повертає значення, згенероване для конкретної таблиці в будь-якій сесії та сфері видимості.
@@IDENTITY Повертає останнє ідентифікаційне значення, згенероване для будь-якої таблиці у всіх сферах поточної сесії.
SCOPE_IDENTITY Повертає останнє ідентифіковане значення, яке було згенероване для поточної сесії, та будь-яку таблицю в поточному діапазоні
SCOPE_IDENTITY і @@IDENTITY повертає останнє ідентифікаційне значення, яке було згенероване в будь-якій таблиці під час поточної сесії. Однак SCOPE_IDENTITY повертає лише значення, вставлені у поточний діапазон; @@IDENTITY Не обмежується конкретним обсягом.
Наприклад, існують дві таблиці — T1 і T2, на яких визначено тригер INSERT. Коли рядок вставляють у T1, тригер спрацьовує, і ряд вставляється в T2. Цей приклад ілюструє два телескопи: один на T1, інший на T2 внаслідок спуску.
Припускаючи, що і T1, і T2 мають стовпці IDENTITY, @@IDENTITY і SCOPE_IDENTITY повертатимуть різні значення наприкінці оператора INSERT на T1.
@@IDENTITY Повертає останнє значення стовпця IDENTITY, вставлене в будь-яку область видимості поточної сесії, яке є значенням, вставленим у T2.
SCOPE_IDENTITY() повертає значення ІДЕНТИЧНОСТІ, вставлене в T1, яке є останнім INSERT, що відбувався в тому ж діапазоні. Якщо функцію SCOPE_IDENTITY() викликають до того, як у сфері обмежування виникає оператор вставки до стовпця ідентичності, функція повертає значення NULL.
Значення, які повертаються IDENT_CURRENT('T1') та IDENT_CURRENT('T2'), є останніми самоінкрементальними значеннями двох таблиць відповідно.
Експеримент AJQC: (40 локальних потоків, 40+40 віддалених потоків одночасно тестування, вставка рядків потужністю 1200 Вт), висновок такий:
1. У типових каскадних застосуваннях. @@IDENTITY не можна використовувати, і паралельні конфлікти виникатимуть, коли 1 Вт багаторядний на CII850, 256M SD-машинах. На P42.8C та 512M DDR одночасно виникає конфлікт, коли ліній перевищує 6000.
2.SCOPE_IDENTITY() абсолютно надійний і може використовуватися у процесі зберігання, навіть тригери не потрібно створювати, і немає паралельних конфліктів
SELECT IDENT_CURRENT('TableName') — повертає останнє значення міток, згенероване у вказаній таблиці
SELECT IDENT_INCR('TableName') — повертає значення інкременту поля для зазначеної таблиці
SELECT IDENT_SEED('TableName') — повертає позначене значення насіння поля вказаної таблиці
Повертає автоматичний номер останнього вставленого запису
SELECT IDENT_CURRENT('TableName')
Повернутися до наступного автоматичного номера:
SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))
SELECT @@IDENTITY - Повертає останнє позначене значення, яке було згенероване у всіх таблицях поточної сесії
|