Образовательный портал Claw.ru
Всё для учебы, работы и отдыха
» Шпаргалки, рефераты, курсовые
» Сочинения и изложения
» Конспекты и лекции
» Энциклопедии

Все замечательно, но в подобном подходе с сессиями есть один, довольно серьезный недостаток. Если на таблице с автоинкрементным столбцом висит какой-нибудь триггер на вставку, который, в свою очередь, что-то кому-то вставляет, то @@IDENTITY вернет не значение, записанное сервером в оригинальную таблицу, а то значение, которое будет записано после второй вставки в триггере, так как формально это все еще та же сессия.

Для того чтобы избежать таких неприятностей, служит SCOPE_IDENTITY(), который возвращает значение, записанное сервером в автоинкрементный столбец не только в рамках сессии, но и в рамках текущего пакета (batch).

-- еще одна табличка с автоинкрементом

CREATE TABLE Ident2(ID int IDENTITY(0, -2), value varchar(50))

GO

-- триггер на вставку к первоначальной табличке

CREATE TRIGGER IdentTrigger ON Ident_table

FOR INSERT

AS

INSERT INTO Ident2 (value) VALUES(GetDate())

GO

-- добавление еще одной записи

INSERT INTO Ident_table (some_values) VALUES ('value 7')

-- наслаждение результатом...

SELECT @@IDENTITY as [Last ID in session (@@IDENTITY)]

SELECT SCOPE_IDENTITY() as [Last ID in batch (SCOPE_IDENTITY())]

SELECT * FROM Ident_table

--- результат:


Рекомендуем скачать другие рефераты по теме: скачать доклад на тему, решебник по математике класс виленкин.


Категории:




Предыдущая страница реферата | 1  2  3  4  5  6  7  8  9  10  11 |


Поделитесь этой записью или добавьте в закладки

   



Рефераты от А до Я