Рефераты | Рефераты по информатике, программированию | К вопросу об идентификаторах | страница реферата 4 | Большая Энциклопедия Рефератов от А до Я
Большая Энциклопедия Рефератов от А до Я
  • Рефераты, курсовые, шпаргалки, сочинения, изложения
  • Дипломы, диссертации, решебники, рассказы, тезисы
  • Конспекты, отчеты, доклады, контрольные работы

  • Все замечательно, но в подобном подходе с сессиями есть один, довольно серьезный недостаток. Если на таблице с автоинкрементным столбцом висит какой-нибудь триггер на вставку, который, в свою очередь, что-то кому-то вставляет, то @@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 |




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

       




    Категории:



    Разделы сайта




    •