Miałem taką samą potrzebę i znalazłem tę odpowiedź.
Spowoduje to utworzenie rekordu w tabeli firmy (komp), pobranie automatycznego identyfikatora utworzonego na stole firmowym i umieszczenie go w tabeli personelu (personel), aby można było połączyć 2 tabele, WIELU pracowników do JEDNEJ firmy. Działa na mojej bazie danych SQL 2008, powinien działać na SQL 2005 i nowszych.
===========================
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” jest używany do przechowywania automatycznie wygenerowanego numeru identyfikacyjnego firmy, który zamierzamy pobrać
AS
Begin
SET NOCOUNT ON
DECLARE @tableVar TABLE (tempID INT)
- Powyższy wiersz służy do tworzenia tabeli tymczasowej do przechowywania automatycznie generowanego numeru identyfikacyjnego do późniejszego wykorzystania. Ma tylko jedno pole „tempID”, a jego typ INT jest taki sam jak „@recID” .
INSERT INTO comp(comp_name, comp_regno, comp_email)
OUTPUT inserted.comp_id INTO @tableVar
- Wstawiono „ WYJŚCIE ” . 'powyżej jest używana do pobierania danych z dowolnego pola w rekordzie, który właśnie tworzy. Te potrzebne nam dane to autonumerowanie identyfikatora. Więc upewnij się, że zawiera poprawną nazwę pola dla twojej tabeli, moja to „comp_id” . To jest następnie upuszczane do tabeli tymczasowej, którą utworzyliśmy wcześniej.
VALUES (@comp_name, @comp_regno, @comp_email)
SET @recID = (SELECT tempID FROM @tableVar)
- Powyższa linia służy do przeszukiwania utworzonej wcześniej tabeli tymczasowej, w której zapisany jest potrzebny nam identyfikator. Ponieważ w tej tabeli tymczasowej jest tylko jeden rekord i tylko jedno pole, wybierze tylko potrzebny numer identyfikacyjny i upuści go w „ @recID ”. „ @recID ” ma teraz żądany numer identyfikacyjny i możesz go używać tak, jak chcesz, tak jak ja użyłem go poniżej.
INSERT INTO staff(Staff_comp_id)
VALUES (@recID)
End
- Więc proszę. Możesz faktycznie pobrać to, co chcesz, w wierszu „OUTPUT insert.WhatEverFieldNameYouWant” i utworzyć pola, które chcesz w tabeli tymczasowej, i uzyskać do nich dostęp, aby używać, jak chcesz.
Szukałem czegoś takiego od wieków, z tym szczegółowym podziałem, mam nadzieję, że to pomoże.
OUTPUT INSERTED.ID
może generować problem w przypadku aktywnego wyzwalacza na stole