【问题标题】:How to Auto increment column when using merge and in not matching case - SQL Server如何在使用合并和不匹配的情况下自动增加列 - SQL Server
【发布时间】:2018-04-30 07:18:49
【问题描述】:

当不匹配的情况下,想在MERGE中添加一个递增的数字。

它只允许编写插入语句,我也尝试使用 MAX() 函数设置值,但将相同的数字添加到所有记录。

期待什么

MERGE #targetTable AS [target]
USING #sourceTable AS [source] ON [target].key = [source].key

WHEN MATCHED
    UPDATE ROWS
WHEN NOT MATCHED THEN
   INSERT (id, Name)
   VALUES ([incremented_id], source.Name);

注意:表中已经有一些记录。

任何帮助将不胜感激

【问题讨论】:

  • 如果您的目的地有 id 列作为 Identity (1,1),它将插入自动递增 id。并且您不需要将其包含在合并语句中
  • 该表没有该 id 列它只是一个普通的 int。
  • 你能做类似的事情吗:VALUES (ROW_NUMBER() OVER (order by source.name) + (SELECT max(id) FROM target), source.Name);

标签: sql-server merge


【解决方案1】:

尝试从表中获取最大 ID,然后将其添加到此参数中。使用此选择,您将为插入的每一行创建一个新 id。像这样的东西应该可以工作

     declare @root int = 64895
     WHEN MATCHED
     UPDATE ROWS
     WHEN NOT MATCHED THEN
     INSERT (id, Name)
     VALUES( ((@root - 1) + ROW_NUMBER() over(order by ID)), source.Name);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 2021-06-04
    • 2011-10-04
    • 1970-01-01
    相关资源
    最近更新 更多