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
заявление.