小编Geo*_*rge的帖子

复杂的TSQL合并

我已经" 继承了 "一条出色的TSQL代码:

  • 在游标上逐行循环.
  • 游标包含表A中需要合并(Upserted)的数据
  • 对于游标中的每个行循环,调用存储过程.过程:
    • 如果表A中存在相应的行,则更新它
    • 如果这样的行不存在则:
      • 在另一个表B中插入一行.
      • 获取新生成的ID(比如称为IDB)
      • 在表A中插入一行.表A插入需要一个IDB(该字段不为null,它应该只有表B中的值,但没有FK约束)

显然这很糟糕(性能和优雅的原因)!!

问题 首先,这看起来像MERGE使用的标准情况.我试过做:

MERGE [dbo].[TableA] AS Target
USING <cursor data set as a select statement> as Src on target.IDA = Src.IDA
WHEN MATCHED 
  //update
WHEN NOT MATCHED
//insert <------ Fails because obviously a new IDB is required
Run Code Online (Sandbox Code Playgroud)

还尝试了各种方法,nested select that sends IDB on the OUTPUT但它失败了,因为IDB是PK.

其他类型的合并也失败了,例如:

MERGE Table A with <cursor data set as a select statement>
...
MERGE Table A with Table B
WHEN …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server merge upsert sql-server-2008

5
推荐指数
1
解决办法
2104
查看次数

标签 统计

merge ×1

sql-server ×1

sql-server-2008 ×1

t-sql ×1

upsert ×1