2015-03-17 5 views
-1

Я хочу сохранить pt_id в свою временную таблицу, используя OUTPUT, однако я не вставляю pt_id в ct_tarf, что мне делать?INSERT INTO с SELECT с использованием OUTPUT

я получаю следующее сообщение об ошибке:

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 
+2

insert.pt_id вместо pt_id –

ответ

2

SQL2008 +:

Предполагая, что вы хотите вставить в @tbl_ids_tarf (который является объектом OUTPUT ... INTO оговорки) значений из столбцов, которые не возвращенных inserted или 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 
*/ 
+1

Спасибо, человек, Merge работал чудесно, извините, мой код был грязным –

3

У вас есть несколько проблем с вашим запросом - столбец именование один, неполный 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 ........ 
Смежные вопросы