【问题标题】:How can I get the computed column value as an output after SQL insert? [duplicate]如何在 SQL 插入后将计算的列值作为输出? [复制]
【发布时间】:2021-08-12 11:05:00
【问题描述】:

我有一个这样的表定义:

ID  int /* identity column */

SecondID nvarchar(50) /* ComputedColumn */

birthdate datet */ Simple Column */

我想在这个表上插入值,我想将插入的值作为输出, 第一个 ID,我是通过 scope_identity 函数得到的。

计算函数:ID * 1000

例如,我想插入这些值:(1,1000,12/08/2021)

我现在能得到的只有ID,

CREATE PROCEDURE [dbo].[USER_insert]
@birthdate date,
@SecondIDOut nvarchar(50) output

Begin
AS
INSERT INTO [dbo].[User]
           ([birthdate])
     VALUES
           (@birthdate)
           
    SET @ID = scope_identity()
    /* SET @SecondIDOut = ?? what can I set here */

END

执行SQL插入语句后如何获取SecondID?

【问题讨论】:

  • 使用OUTPUT 子句。
  • 已经用过,我会更新我的问题
  • birthdate 是日期,而不是日期时间。在编写代码之前三思。如果您确实想要为 SecondID 计算的值,则必须检索并以某种方式将其传递回过程的调用者。您可以添加另一个输出参数,也可以简单地将插入的行作为结果集返回。你选择。
  • 谢谢你的评论,我更新了我的问题。

标签: sql sql-server


【解决方案1】:

使用OUTPUT 子句:

DECLARE @vals TABLE (id int, secondid varchar(30));

INSERT INTO [dbo].[User] ([birthdate])
    OUTPUT inserted.id, inserted.secondid INTO @vals;
     VALUES
           (@birthdate)
           
SELECT *
FROM @vals;

最后的陈述只是举例。如果您愿意,可以将值分配给参数。

【讨论】:

  • 您没有说明如何将inserted.id 分配给我添加的参数??我的意思是在 Set 语句中?我应该写什么来获得输出值??
  • 对不起,但这不是解决方案,因为我每次都插入新行,如何从表@vals 中获取最后一行?
  • @abdou31 。 . .阅读OUTPUT 子句。它做你想做的事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2022-01-05
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
相关资源
最近更新 更多