无法在insert语句中使用src键返回输出

yshpjwxd  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(315)

我希望output子句返回源键和目标键,如下所示:

  1. INSERT INTO sales.stores(store_id,store_name)
  2. OUTPUT deleted.store_id,deleted.store_name, inserted.store_id,inserted.store_name
  3. VALUES (4,'Adidas'),(5,'Nike')

我有以下错误:

  1. The multi-part identifier "deleted.store_id" could not be bound.
  2. The multi-part identifier "deleted.store_name" could not be bound.
9avjhtql

9avjhtql1#

说清楚,在 INSERT , UPDATE ,和 DELETE 语句中,只能引用目标表中的列 OUTPUT 条款。在一个 MERGE 语句可以引用目标和源中的列。
这不能直接在insert语句中完成,因为您无权访问源表。所以您需要在这里使用merge语句:

  1. MERGE INTO sales.stores AS TGT
  2. USING (
  3. VALUES(4,'Adidas'),(5,'Nike')
  4. ) AS SRC (store_id,store_name)
  5. ON 1 = 2
  6. WHEN NOT MATCHED THEN
  7. INSERT(store_id, store_name) VALUES(store_id,store_name)
  8. OUTPUT
  9. SRC.*, inserted.*;

这个 INSERT 仅当合并条件为false时才允许。

pdkcd3nj

pdkcd3nj2#

这是一种记录在案的行为: DELETED 不能与 OUTPUT 合同条款 INSERT 声明。
如果你仔细想想,这个限制是有意义的,因为 INSERT 语句不会删除任何内容。
所以你应该做:

  1. INSERT INTO sales.stores (store_id, store_name)
  2. OUTPUT inserted.store_id,inserted.store_name
  3. VALUES (4, 'Adidas'), (5, 'Nike')

db小提琴演示:

  1. store_id | store_name
  2. -------: | :---------
  3. 4 | Adidas
  4. 5 | Nike

相关问题