SQL Server: несколько выходных предложений

У меня есть две таблицы, Table_1 а также Table_2,

Table_1 имеет столбцы PK (автоинкремент int) а также Value (nchar(10)).

Table_2 имеет FK (int), Key (nchar(10)) а также Value (nchar(10)).

То есть Table_1 это таблица данных и Table_2 хранилище значений ключей, в котором одна строка Table_1 может соответствовать 0, 1 или более клавишам и значениям в Table_2,

Я хотел бы написать код, который программно создает запрос, который вставляет одну строку в Table_1 и переменное количество строк в Table_2 используя первичный ключ от Table_1,

Я могу сделать это легко с одной строкой:

INSERT INTO Table_1 ([Value])
OUTPUT INSERTED.PK, 'Test1Key', 'Test1Val' INTO Table_2 (FK, [Key], [Value])
VALUES ('Test')

Но SQL, похоже, не нравится идея иметь несколько строк. Это не удается:

INSERT INTO Table_1 ([Value])
OUTPUT INSERTED.PK, 'Test1Key', 'Test1Val' INTO Table_2 (FK, [Key], [Value])
OUTPUT INSERTED.PK, 'Test2Key', 'Test2Val' INTO Table_2 (FK, [Key], [Value])
OUTPUT INSERTED.PK, 'Test3Key', 'Test3Val' INTO Table_2 (FK, [Key], [Value])
VALUES ('Test')

Есть ли способ сделать эту работу?

2 ответа

Решение

Я должен был поставить код в ответ, в комментарии это выглядит некрасиво...

CREATE TABLE #Tmp(PK int, value nchar(10))

INSERT INTO Table_1 ([Value])
OUTPUT INSERTED.PK, inserted.[Value] INTO #Tmp
SELECT 'Test'

INSERT INTO Table_2 (FK, [Key], Value)
SELECT PK, 'Test1Key', 'Test1Val' FROM #Tmp
UNION ALL SELECT PK, 'Test2Key', 'Test2Val' FROM #Tmp
UNION ALL SELECT PK, 'Test3Key', 'Test3Val' FROM #Tmp

Кстати, SQL Server не позволит вам сделать все это в одном запросе без какого-либо уродливого взлома...

Попробуйте положить INSERTED.PK значение в параметр, а затем вставить в таблицу 2 с 3 INSERT..VALUES или 1 INSERT..SELECT заявление.

Другие вопросы по тегам