Источник: Интернет. Автор: неизвестен.
- Создавать базы данных и таблицы
создать базу данных MyDataBase
используйте MyDataBase
Создать таблицу mytable
id int тождество(1,1),
Имя Варшар (20)
)
--Выполните этот SQL, чтобы узнать значение самоинкрементального столбца, соответствующего только что вставленной записи
вставить в мои значения ('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 удалённых потоков, вставка строк мощностью 1200 Вт), вывод таков:
1. В типичных каскадных приложениях. @@IDENTITY нельзя использовать, и параллельные конфликты возникают, когда 1 Вт работает в нескольких строках на машинах с разрешением 256M SD. На частотах P42.8C и 512M DDR происходит одновременный конфликт, когда всего более 6000 линий.
2.SCOPE_IDENTITY() абсолютно надёжна и может использоваться в процессе хранения, даже триггеры не требуют постройки, и нет параллельных конфликтов
SELECT IDENT_CURRENT('TableName') — возвращает последнее значение метки, сгенерированное в указанной таблице
SELECT IDENT_INCR('TableName') — возвращает значение увеличения отмеченного поля для указанной таблицы
SELECT IDENT_SEED('TableName') — возвращает отмеченное значение семени поля указанной таблицы
Возвращает автоматический номер последней вставленной записи
ВЫБРАТЬ IDENT_CURRENT('TableName')
Вернуться к следующему автоматическому номеру:
SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))
SELECT @@IDENTITY — возвращает последнее отмеченное значение, сгенерированное во всех таблицах текущей сессии
|