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

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

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

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

我有以下错误:

The multi-part identifier "deleted.store_id" could not be bound.

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

9avjhtql1#

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

MERGE INTO sales.stores AS TGT
USING ( 

VALUES(4,'Adidas'),(5,'Nike')

) AS SRC (store_id,store_name)
ON 1 = 2
WHEN NOT MATCHED THEN
INSERT(store_id, store_name) VALUES(store_id,store_name)
OUTPUT
SRC.*, inserted.*;

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

pdkcd3nj

pdkcd3nj2#

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

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

db小提琴演示:

store_id | store_name
-------: | :---------
       4 | Adidas    
       5 | Nike

相关问题