I want the OUTPUT clause to return both the source key and the target key like below :
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')
I am having this following error :
The multi-part identifier "deleted.store_id" could not be bound. The multi-part identifier "deleted.store_name" could not be bound.
Advertisement
Answer
To be clear, in INSERT
, UPDATE
, and DELETE
statements, you can only refer to columns from the target table in the OUTPUT
clause. In a MERGE
statement you can refer to columns from both the target and the source.
This cannot be done directly in the INSERT statement because you don’t have access to the source table. So you need to use a MERGE statement here :
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.*;
The INSERT
is only allowed when the MERGE condition is false.