代码之家  ›  专栏  ›  技术社区  ›  ruohola

如何在SQL中更新和复制行?

  •  2
  • ruohola  · 技术社区  · 7 年前

    假设我有一个表(链接到一个名为 Item ItemID 列),如下所示(ID列和时间列是自动生成的):

    ID    ItemID   Value   ValueOther   Latest   Time
    12    100      'foo'   'bar'        1        <Autogenerated timestamp>
    

    然后我将在 项目 得到 项目 我想做以下的事情:

    将所示行更新为最新的=0,并插入与新行相同的行 项目 . 我该怎么做呢?

    想要的最终结果:

    ID    ItemID   Value   ValueOther   Latest   Time
    12    100      'foo'   'bar'        0        <Autogenerated timestamp>
    110   250      'foo'   'bar'        1        <Autogenerated timestamp>
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   t-clausen.dk    7 年前

    OUTPUT

    DECLARE @yourtable table
    (
      ID INT identity, 
      ItemID int,
      [Value] char(3),
      ValueOther char(3),
      Latest bit,
      [Time] datetime default getdate()
    )
    
    INSERT  @yourtable(ItemID, [Value], ValueOther, Latest) 
    values(100, 'foo', 'bar', 1)
    
    DECLARE @itemID INT = 250
    
    UPDATE @yourtable
    SET latest = 0
    OUTPUT
    @itemID, DELETED.[Value], DELETED.ValueOther, DELETED.Latest, DELETED.[time]
    INTO @yourtable(ItemID, [Value], ValueOther, Latest, [time])
    WHERE latest = 1
    
    SELECT * FROM  @yourtable