sql - 使用 OUTPUT 与 SELECT 一起插入

标签 sql sql-server tsql

我想使用 OUTPUTpt_id 存储到临时表中,但我没有将 pt_id 插入 ct_tarf ,我该怎么办?

我收到以下错误:

The multi-part identifier 'pt_id' could not be bound.

查询:

DECLARE @tbl_ids_tarf TABLE (pt_id INT, pt_id_tarf INT)

INSERT INTO dbo.ct_tarf(tr_id_serv, tr_name, tr_money)
OUTPUT pt_id, inserted.tr_id INTO @tbl_ids_tarf(ptr_id, ptr_id_tarf)
   SELECT 
      pt_id_serv, pt_name, pt_money
   FROM 
      dbo.opr_prop_tar
   WHERE 
      pt_id_tarf

最佳答案

SQL2008+:

假设您想要将 inserted 未返回的列中的值插入到 @tbl_ids_tarf(这是 OUTPUT ... INTO 子句的目标)中deleted 虚拟表,那么一种解决方案是使用 MERGE statement而不是INSERT:

DECLARE @Target TABLE (
    Col1 INT
)
INSERT  @Target VALUES (1), (2);

DECLARE @Output TABLE (Col1 INT, ColB INT);

;WITH Source
AS (
    SELECT  * 
    FROM    (VALUES (10, 100), (20, 200), (30, 300)) x(ColA, ColB)
)
MERGE INTO @Target x
USING Source y ON x.Col1 = y.ColA
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (Col1) VALUES (y.ColA)
OUTPUT inserted.Col1, y.ColB INTO @Output (Col1, ColB); 
--                     ^-- y.ColB isn't returned by inserted or deleted virtual tables. 
-- inserted and deleted are based on `@Target` table [variable]

SELECT * FROM @Output;
/*
Col1        ColB
----------- -----------
10          100
20          200
30          300
*/

关于sql - 使用 OUTPUT 与 SELECT 一起插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29110175/

相关文章:

SQL 完全连接表的条件

sql-server - 将 bcp 放入带有另一个 sql 语句的事务中

sql - 在 SQL 查询中将 Nvarchar DD/MM/YYYY 转换为 YYYY-MM-DD

javascript - 回调返回空数组js

sql - 如何从上面的行中选择信息?

sql-server - 优化 SQL Server 中的 ROW_NUMBER()

php - 如何在 SELECT 语句 mySQL 中做 * 和计算?

sql - 对于 SQL,如何使用 group by 两次但仅在第二组内按 sum() 排序

sql - 找出 SQL Server 上的查询中获取了哪些锁?

sql - 分区总和