parametros - procedimientos almacenados anidados sql server
Llamar al procedimiento almacenado desde otro procedimiento almacenado Servidor SQL (3)
En primer lugar, si el table2
de table2 es una identidad, no puede insertarlo explícitamente hasta que configure IDENTITY_INSERT
en esa tabla
SET IDENTITY_INSERT table2 ON;
antes del inserto.
Por lo tanto, uno de los dos modificará su segundo almacenado y lo llamará con solo los parámetros productName
y productDescription
y luego obtendrá la nueva ID.
EXEC test2 ''productName'', ''productDescription''
SET @newID = SCOPE_IDENTIY()
o ya tiene la ID del producto y no necesita llamar a SCOPE_IDENTITY()
y puede hacer la inserción en la table1
con esa ID
Tengo 3 inserte procedimientos almacenados cada SP inserta datos en 2 tablas diferentes
Table 1 Table 2
idPerson idProduct
name productName
phoneNumber productdescription
FK-idProduct
SP para la tabla 1 SP para la tabla 2
create procedure test1 create procedure test2
WITH WITH
EXECUTE as caller EXECUTE as caller
AS AS
declare declare
@idPerson int, @idProduct int,
@name varchar(20), @productName varchar(50),
@phone varchar(20) @productoDescription varchar(50)
SET nocount on; SET nocount on;
Begin Begin
insert into table1( insert into table2(
idPerson, idProduct,
name, productName,
phone) productDescription)
values( values(
@idPerson, @idProduct,
@name, @productName,
@phone) @productDescription)
end end
Necesito llamar al procedimiento almacenado prueba 2 desde el procedimiento almacenado prueba 1 e insertar el FK-ID en la tabla 1
Puede agregar un parámetro OUTPUT a test2 y configurarlo en la nueva identificación directamente después de INSERT usando:
SELECT @NewIdOutputParam = SCOPE_IDENTITY()
Luego, en la prueba 1, recupérelo así:
DECLARE @NewId INTEGER
EXECUTE test2 @NewId OUTPUT
-- Now use @NewId as needed
Simplemente llame a test2
desde test1
como:
EXEC test2 @newId, @prod, @desc;
Asegúrese de obtener @id
usando:
SELECT @newId = @@SCOPE_IDENTITY