Tengo un procedimiento almacenado con varias instrucciones de inserción/selección. Digamos que estoy usando la primera inserción para completar una tabla de "Administrador". En la inserción, se agrega un ManagerId (incrementado automáticamente), pero no se hace referencia en la instrucción de inserción. Luego deseo utilizar el ID de administrador de esta tabla para insertar una fila en otra tabla, donde ID de administrador es una clave externa. Código de ejemplo como sigue ..Recuperación del valor de la columna autoincrementado de la tabla donde se inserta/selecciona múltiples en el procedimiento almacenado único
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
Esto, obviamente, no funciona. Este fue mi intento de resolver esto. Soy bastante nuevo en SQL, por lo que cualquier ayuda con este problema sería muy apreciada.
@@ dentity le dará la última identidad, incluso si no era de el inserto en su alcance (como si el inserto dispara un disparador) –
De acuerdo con KM, nunca usaría @@ identity porque tarde o temprano tendrá problemas de integridad de datos. SAme con ident_current (puede obtener la identidad de otro proceso que acaba de insertar después del suyo). Si quiero la identidad que acabo de insertar, uso scope_identity o en una versión más nueva puedes usar la cláusula de salida (no estoy seguro si esto entró en 2005 o 2008, ya que saltamos 2005) que tiene la ventaja de devolver todo el conjunto de identidad valores si ejecutó un inserto de registro mulitple basado en conjunto. – HLGEM