INSERT INTO with SELECT 使用 OUTPUT
INSERT INTO with SELECT using OUTPUT
我想使用 OUTPUT
将 pt_id
存储到我的临时 table 中,但是我没有将 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
您的查询有几个问题 - 列命名是一个,不完整的 WHERE
子句是另一个,缺少 Inserted.
前缀是第三个。
试试这个:
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 inserted.pt_id, inserted.tr_id INTO @tbl_ids_tarf(pt_id, pt_id_tarf)
********* ******************
SELECT
pt_id_serv, pt_name, pt_money
FROM
dbo.opr_prop_tar
WHERE
pt_id_tarf ........
SQL2008+:
假设您要从 inserted
或 deleted
虚拟表未返回的列中插入 @tbl_ids_tarf
(这是 OUTPUT ... INTO
子句的目标)值那么一种解决方案是使用 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
*/
我想使用 OUTPUT
将 pt_id
存储到我的临时 table 中,但是我没有将 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
您的查询有几个问题 - 列命名是一个,不完整的 WHERE
子句是另一个,缺少 Inserted.
前缀是第三个。
试试这个:
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 inserted.pt_id, inserted.tr_id INTO @tbl_ids_tarf(pt_id, pt_id_tarf)
********* ******************
SELECT
pt_id_serv, pt_name, pt_money
FROM
dbo.opr_prop_tar
WHERE
pt_id_tarf ........
SQL2008+:
假设您要从 inserted
或 deleted
虚拟表未返回的列中插入 @tbl_ids_tarf
(这是 OUTPUT ... INTO
子句的目标)值那么一种解决方案是使用 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
*/