Получить последний вставленный идентификатор как часть мульти-вставки? - PullRequest
1 голос
/ 15 апреля 2019

У меня есть дерево моделей телефонов и цены.В данный момент я зацикливаюсь на каждой модели и вставляю их в базу данных, получая идентификатор, устанавливая это как parent_id цен и вставляя цены.

По мере того, как количество моделей телефонов и цены идутЭто становится все медленнее и медленнее.

Есть ли способ выполнить массовую вставку, но таким образом, чтобы я мог получить последний инкрементный идентификатор в текущем запросе?

например

insert into my_table ('name', 'value', 'parent_id') values
('model', 'apple', 0),
@@parent_id = last_insert_id,
('iphone5s', '5.99', @@parent_id),
('iphoneX', '15.99', @@parent_id),

1 Ответ

0 голосов
/ 15 апреля 2019

Используйте Scope_identity (), сначала объявите переменную и присвойте переменной значение последнего идентификатора.

DECLARE @i_LastIdentVal INT,
        @@parent_id INT

BEGIN TRY
    BEGIN TRANSACTION
INSERT INTO my_table (
            name, 
            value, 
            parent_id
            ) 
VALUES ('model', 'apple', 0),
       ('iphone5s', '5.99', @@parent_id),
       ('iphoneX', '15.99', @@parent_id)

SELECT @i_LastIdentVal = Scope_identity()

COMMIT TRANSACTION
END TRY
BEGIN CATCH
    DECLARE 
        @ErrorMessage NVARCHAR(4000),
        @ErrorSeverity INT,
        @ErrorState INT;
    SELECT 
        @ErrorMessage = ERROR_MESSAGE(),
        @ErrorSeverity = ERROR_SEVERITY(),
        @ErrorState = ERROR_STATE();
    RAISERROR (
        @ErrorMessage,
        @ErrorSeverity,
        @ErrorState    
        );
    ROLLBACK TRANSACTION
END CATCH

Примечание Убедитесь, что в таблице вставки ранее был создан столбец идентификаторов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...