【问题标题】:Insert SCOPE_IDENTITY at time of insert?在插入时插入 SCOPE_IDENTITY?
【发布时间】:2020-08-16 10:45:50
【问题描述】:

在插入时插入SCOPE_IDENTITY

我有两个步骤来完成这项工作:

INSERT INTO MyDB (Name, Path, File) 
VALUES ('1', 'D:\', '1.Pdf') SELECT SCOPE_IDENTITY() AS ID;

INSERT INTO OtherDB (New, Barcode, FileId)
VALUES ('2', '1', ID);

第二个插入中的ID值来自第一个SQL返回的SCOPE_IDENTITY()

有没有办法一步到位?

例如:

INSERT INTO OtherDB (New, Barcode, FileId)
VALUES ('2', '1', INSERT INTO MyDB (Name, Path, File) 
                  VALUES ('1', 'D:\', '1.Pdf') SELECT SCOPE_IDENTITY() AS ID);

【问题讨论】:

  • 您为什么使用不受支持的 SQL Server 版本?

标签: sql sql-server-2008


【解决方案1】:

我同意@GordonLinoff 的观点,即OUTPUT 子句在这里很有用。此外,还可以使用 OUTPUT 在单个 INSERT 语句中插入 2 个不同的表。

INSERT INTO MyDB (Name, Path, [File]) 
OUTPUT '2', '1', inserted.ID INTO OtherDB
VALUES ('1', 'D:\', '1.Pdf');

【讨论】:

    【解决方案2】:

    使用OUTPUT 会安全得多:

    declare @ids table (id int);
    
    Insert Into MyDB (Name, Path, File)
        output inserted.id into @ids
        Values ('1' ,'D:\', '1.Pdf');
    
    insert into otherdb (New, Barcode, FileId)
        select '2', '1', i.id
        from @ids i;
    

    至于你的问题,这基本上需要两次插入,因为你想插入两个表。您可以通过创建组合两个表的视图并在视图上使用触发器来解决此问题。

    【讨论】:

    • 不需要是declare @ids table (id int); 吗?我认为您缺少 table 关键字
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多