Източник: Интернет Автор: Неизвестен
- Създаване на бази данни и таблици
създаване на база данни 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() връща стойността IDENTITY, вмъкната в T1, която е последният INSERT, който се е появил в същия обхват. Ако функцията SCOPE_IDENTITY() се извика преди да се появи инструкционното изявление към колоната за идентичност в обхвата, функцията връща стойност NULL.
Стойностите, връщани от IDENT_CURRENT('T1') и IDENT_CURRENT('T2'), са последните самоинкрементални стойности на двете таблици съответно.
Експериментът на AJQC: (40 локални нишки, 40+40 отдалечени нишки едновременно тестване, вмъкване на редове от 1200W), заключението е:
1. В типични каскадни приложения. @@IDENTITY не може да се използва, а паралелни конфликти възникват, когато 1W е многоредов на CII850, 256M SD машини. При P42.8C и 512M DDR има едновременен конфликт, когато има само над 6000 линии.
2.SCOPE_IDENTITY() е абсолютно надежден и може да се използва в процеса на съхранение, дори тригерите не е необходимо да се изграждат и няма паралелни конфликти
SELECT IDENT_CURRENT('TableName') - Връща последната стойност на етикета, генерирана в зададената таблица
SELECT IDENT_INCR('TableName') – връща стойността за увеличение на отбелязаното поле за зададената таблица
SELECT IDENT_SEED('TableName') – връща маркираната стойност на seed на зададената таблица
Връща автоматичния номер на последния вмъкнат запис
SELECT IDENT_CURRENT('TableName')
Връщане към следващото автоматично число:
SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))
SELECT @@IDENTITY - Връща последната маркирана стойност, генерирана във всички таблици през текущата сесия
|