Поле вывода из другой таблицы при вставке SQL Server - PullRequest
0 голосов
/ 24 мая 2018

У меня есть таблица @p2, отправленная в качестве параметра в хранимую процедуру с идентификатором IdObjectSubTypeTemp, мне нужно вставить в таблицу ObjectSubType и вывести идентификатор с идентификатором таблицы параметров, как показано ниже:

INSERT INTO [dbo].[ObjectSubType]
    ([IdObject]
    ,[IdSubType])
OUTPUT inserted.[IdObjectSubType] ,OS.[IdObjectSubTypeTemp]
INTO @IdObjectSubTypeTbl
SELECT OS.[IdObject] 
    ,OS.[IdSubType]
FROM @p2 OS

Но я продолжаю получать это:

Не удалось связать многоэлементный идентификатор "OS.IdObjectSubTypeTemp".

, хотя ясделал то же самое при обновлении, и он работает, но при вставке он не работает

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Вы можете использовать MERGE вместо INSERT INTO.Это позволит ссылаться на столбцы @ p2, даже если они не используются:

DECLARE @p2 AS TABLE (IdObject INT,IDSubType INT,IdObjectSubTypeTemp CHAR(10));
DECLARE @IdObjectSubTypeTbl AS TABLE (col1 INT, col2 CHAR(10));

INSERT INTO @p2(IdObject, IDSubType, IdObjectSubTypeTemp) VALUES(1,1,'a');

MERGE INTO [dbo].[ObjectSubType] tgt
USING @p2 src ON tgt.IdObject = src.IdObject
WHEN NOT MATCHED BY TARGET THEN
INSERT  (IdObject, IdSubType)
VALUES (src.IdObject, src.IdSubType)
OUTPUT inserted.[IdSubType] ,src.[IdObjectSubTypeTemp]   
                             -- refering to column not used in INSERT
INTO @IdObjectSubTypeTbl(col1, col2);

DBFiddle Demo

0 голосов
/ 24 мая 2018

Предложение OUTPUT не поддерживает ссылки на from_table_name при использовании в операторе INSERT - внимательно прочитайте документы, это не очень понятно, см. Также комментарии.

Вы можете использоватьПредложение OUTPUT для захвата вставленного нового значения идентификатора. [IdObjectSubType] затем отдельный запрос к INSERT [IdObjectSubType] и [IdObjectSubTypeTemp] INTO @ IdObjectSubTypeTbl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...