获取最后插入的ID作为多插入操作的一部分吗?

时间:2019-04-15 12:56:15

标签: sql sql-server

我有一棵树的手机型号和价格。目前,我正在遍历每个模型,并将它们插入数据库中,获取ID,将其设置为价格的parent_id,然后插入价格。

随着手机型号和价格的上涨,这将变得越来越慢。

是否可以进行批量插入,但是可以让我获取当前查询中的最后一个增量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 :(得分:0)

使用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

请注意确保插入表应该早先创建了Identity列