Mam procedurę składowaną z wieloma instrukcjami wstawiania/wyboru. Powiedzmy, że używam pierwszego insertu do wypełnienia tabeli "Manager". Przy wstawianiu dodawany jest identyfikator menedżera (zwiększany automatycznie), ale nie wymieniony w instrukcji wstawiania. Następnie chcę użyć Identyfikator Manager z tej tabeli, aby wstawić wiersz do innej tabeli, gdzie ManagerId jest kluczem obcym. Przykładowy kod:Trwa pobieranie automatycznie zwiększanej wartości kolumny z tabeli, w której wielokrotne wstawianie/wybieranie w pojedynczej przechowywanej procedurze
USE [TEST]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sptInsertNewManager]
-- Add the parameters for the stored procedure here
@FName varchar(50),
@LName varchar(50),
@EMail varchar(100),
@UserRoleID int,
@LANUserID varchar(25),
@GroupID int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO [Manager]
([FName],
[LName],
[Email],
[UserRoleID],
[LANUserID],
[ActiveFlag],
[GroupID]
)
VALUES
(@FName
,@LName
,@EMail
,@UserRoleID
,@LANUserID
,1
,@GroupID);
COMMIT
SELECT ManagerId FROM [Manager] AS newManager WHERE LANUserID = @LANUserID;
--also insert into Users table.
INSERT INTO [dbo].[aspnet_Users] (
[UserId],
[UserName],
[LoweredUserName],
[ManagerId]
)
VALUES (
NEWID(),
@LANUserID,
LOWER(@LANUserID),
newManager)
END
To oczywiście nie działa. To była moja próba rozwiązania tego. Jestem całkiem nowy w SQL, więc każda pomoc w tym problemie byłaby bardzo doceniana.
@@ dentity daje ostatnią tożsamości, nawet jeśli nie było od wstawić w swoim zasięgu (np. jeśli wkładka uruchamia spust) –
Zgadzam się z KM, nigdy nie użyłbym @@ tożsamości, ponieważ wcześniej czy później będziesz miał problemy z integralnością danych. SAme z ident_current (możesz uzyskać tożsamość innego procesu po prostu wstawionego po twoim). Jeśli chcę tożsamość, którą właśnie wstawiłem, używam scope_identity lub w nowszej wersji można użyć klauzuli output (nie jestem pewien, czy to przyszło w 2005 lub 2008 roku, gdy pominęliśmy 2005), co ma tę zaletę, że zwraca cały zestaw tożsamości wartości, jeśli uruchomiono opartą na zestawie wstawkę rekordu mulitple. – HLGEM