У мене була така ж потреба і я знайшов цю відповідь.
Це створює запис у таблиці компанії (comp), він схоплює створений на столі компанії автоматичний ідентифікатор і опускає його до таблиці персоналу (персоналу), щоб 2 таблиці можна було пов’язати, МНОГО співробітників ОДНУ компанію. Він працює в моєму БД SQL 2008, повинен працювати на SQL 2005 і вище.
============================
CREATE PROCEDURE [dbo].[InsertNewCompanyAndStaffDetails]
@comp_name varchar(55) = 'Big Company',
@comp_regno nchar(8) = '12345678',
@comp_email nvarchar(50) = 'no1@home.com',
@recID INT OUTPUT
- " @recID" використовується для зберігання автоматично створеного ідентифікаційного номера компанії, який ми збираємося взяти
AS
Begin
SET NOCOUNT ON
DECLARE @tableVar TABLE (tempID INT)
- Рядок, наведений вище, використовується для створення таблиці тимчасових знаків для зберігання автоматично згенерованого ідентифікаційного номера для подальшого використання. Він має лише одне поле 'tempID', а його тип INT такий самий, як '@recID' .
INSERT INTO comp(comp_name, comp_regno, comp_email)
OUTPUT inserted.comp_id INTO @tableVar
- Вставте " OUTPUT". 'рядок вище використовується для вилучення даних із будь-якого поля запису, який він створює зараз. Ці дані, які ми хочемо, - це ідентифікаційний номер. Тому переконайтеся, що в ньому вказано правильну назву поля для вашої таблиці, моя - "comp_id" . Потім він потрапляє до темпоральної таблиці, яку ми створили раніше.
VALUES (@comp_name, @comp_regno, @comp_email)
SET @recID = (SELECT tempID FROM @tableVar)
- Рядок вгорі використовується для пошуку таблиці, створеної нами тимчасово, де ми зберігаємо потрібний нам ідентифікатор. Оскільки в цій тимчасовій таблиці є лише один запис, і лише одне поле, воно вибере лише потрібний вам ідентифікаційний номер і перенесе його в ' @recID '. Тепер у " @recID " є потрібний вам ідентифікаційний номер, і ви можете використовувати його як ви хочете, як я використав його нижче.
INSERT INTO staff(Staff_comp_id)
VALUES (@recID)
End
- Тож ти туди. Ви можете фактично захопити все, що завгодно, у рядок "OUTPUT вставлений. WhatEverFieldNameYouWant " та створити поля, які ви хочете у вашій таблиці tempory, та отримати доступ до нього, щоб використовувати, як завжди.
Я шукав щось подібне протягом століть, з цією детальною розбиткою, сподіваюся, це допоможе.
OUTPUT INSERTED.ID
може створити проблему у випадку активного тригера на столі