【问题标题】:How to pass the result id of a row into the next sql request?如何将一行的结果id传递给下一个sql请求?
【发布时间】:2019-12-16 19:04:08
【问题描述】:

假设我有两个关系表:表 A 和表 B。

表 B 有一个表 A 的外键,所以为了在 B 中插入一行,我们首先需要在 A 中插入一行。 所以我在 A 中插入了第一行:

插入 A (c1,c2) 值(v1,v2)

我想要的是在我插入表 b 时获取插入行的 id 以将其用作外键。该怎么做?

在寻找解决方案时,我发现了 here,我需要声明一个新表:

declare @KEY table(KEY int)

Insert into A (c1,c2)
Output inserted.Id into @kEY
values(v1,v2)

但是当我尝试使用它时:

 Insert into B (C1,C2) values(@KEY,v2) 

我收到一条错误消息,告知 @KEY 未声明!

有什么想法吗?

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    表变量与标量变量不同。您不能将这样的 values 子句与表变量一起使用 - 您需要从中进行选择:

    declare @KEY table(KEY int)
    
    Insert into A (c1,c2)
    Output inserted.Id into @kEY
    values(v1,v2)
    
    Insert into B (C1) 
    Select [Key]
    From @Key;
    

    【讨论】:

    • 好的,如何在我的价值观条款中做到这一点?我不能做这个值(从@key中选择[key]),我应该在将它放入局部变量之前创建一个选择吗?
    • 你不要在你的 values 子句中这样做,select 是而不是 values 子句。如果你需要额外的数据,你可以select [Key], 'HardCodedString', @Variable FROM @Key
    • 如果我有其他列怎么办,它们是如何获得它们的值的,我认为解决方案是将选择取出,将结果传递到变量中,然后将其插入值中
    • 在插入语句中,您可以将inserted 伪表中的任何内容输出到您的表变量(假设它具有相关列)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多