当前位置: 首页 > 面试题库 >

如何使用OUTPUT捕获新旧ID?

仲孙奇
2023-03-14
问题内容

例如,假设我有,

    create table product
    (
      ID INT IDENTITY(1,1) NOT NULL,
      Name VARCHAR(10)
    )

    insert into product(Name) values('a')
    insert into product(Name) values('b')
    insert into product(Name) values('c')
    insert into product(Name) values('d')
    insert into product(Name) values('e')

    create table #tempproduct
    (
      ID INT IDENTITY(1,1) NOT NULL,
      Name VARCHAR(10)
    )

    declare @OutputAttributesValues table
    (
      [NewID] INT, 
      [OldID] INT
    )

    insert into #tempproduct(Name)
    OUTPUT INSERTED.[ID],[ID] INTO @OutputAttributesValues
    select [Name] FROM product

看到我需要从输出中获取旧ID和新ID。但是此sql给我错误“无效的列名’ID’。”
http://sqlfiddle.com/#!3/a27b2/1


问题答案:

您不能使用传统INSERT输出非插入字段。请改用合并(注意:仅在数据库兼容性> = 100时有效):

MERGE
  #tempproduct AS t
USING(
  SELECT
      Name
      , ID
  FROM
    product) AS s
ON (1=0)  
WHEN NOT MATCHED   
  THEN INSERT (Name) VALUES (Name)
OUTPUT inserted.ID, s.ID INTO @OutputAttributesValues;

SELECT * FROM @OutputAttributesValues


 类似资料:
  • 问题内容: 我用来产生一个长时间运行的进程,该进程会随着时间的推移将输出发送到stdio,并由我的nodejs脚本读取和处理。棘手的是,我不能保证发送的命令将始终有效。如何在生成中捕获错误?最好不要涉及安装全局异常处理程序,因为我不想处理任何其他异常。(如果那是唯一的方法,我将需要弄清楚何时生成的进程已正确启动,然后卸载该处理程序,这是我不愿陷入的一团糟。) 我要运行的代码如下所示: 但这只会在节

  • 我已经在tomcat 7.0.55中部署了一个应用程序进行测试。我想捕获“HeapDumpOnOutOfMemoryError”是否正在发生。以下是我的JVM参数。 JAVA_OPTS="-server-Xms512M-Xmx2048M-XX: PermSize=256m-XX: MaxPermSize=512m-XX: UseConcMarkSweepGC-XX: UseParNewGC-XX:

  • 是否可以使用promises的ES6语法捕获异步错误?例如,以下操作不起作用(.catch未捕获错误): 但是这个同步版本有: 使用try/catch块和清除catch中的错误是执行以下操作的唯一解决方案吗? 对于这个问题,假设抛出错误的代码部分位于另一个命名函数中,因此它没有访问函数的权限。 谢谢 编辑:这里有一个更完整的示例,说明我想在JSFIDLE中做什么。

  • 我很难匹配和捕捉这些。目前我正在尝试以下变体: 我认为sed有一些regex或捕获组行为我不理解

  • 我有这样的情况,即活动调用管理器类调用提供者。 活动->管理器(带有asyncTask的方法)->提供程序 我应该如何将捕获的异常发送回活动?

  • 我正在使用生成一个长时间运行的进程,该进程随时间将输出发送到stdio,并由我的nodejs脚本读取和处理。棘手的部分是,我不能保证发送的命令永远有效。如何捕捉产卵错误?最好不要安装全局异常处理程序,因为我不想处理任何其他异常。(如果这是唯一的方法,我将需要弄清楚生成的进程何时正确启动,然后卸载处理程序,这是一个我不想陷入的混乱。) 我要运行的代码如下所示: 我清楚地知道为什么我会被告知,我知道要