我有3个插入存储过程,每个SP在2个不同的表中插入数据
Table 1 Table 2
idPerson idProduct
name productName
phoneNumber productdescription
FK-idProduct
表1 SP的SP表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
我需要从存储过程测试1调用存储过程测试2并在表1中插入FK-ID
答案 0 :(得分:29)
只需从test2
致电test1
,如:
EXEC test2 @newId, @prod, @desc;
确保@id
使用:
SELECT @newId = @@SCOPE_IDENTITY
答案 1 :(得分:6)
您可以向test2添加OUTPUT参数,并在INSERT之后使用以下命令将其设置为新ID:
SELECT @NewIdOutputParam = SCOPE_IDENTITY()
然后在test1中,像这样检索它:
DECLARE @NewId INTEGER
EXECUTE test2 @NewId OUTPUT
-- Now use @NewId as needed
答案 2 :(得分:0)
首先,如果table2
的idProduct是一个标识,则在该表上设置IDENTITY_INSERT
之前,不能显式插入它
SET IDENTITY_INSERT table2 ON;
插入之前。
所以两个中的一个,你修改你的第二个存储并仅使用参数productName
和productDescription
来调用它,然后获取新的ID
EXEC test2 'productName', 'productDescription'
SET @newID = SCOPE_IDENTIY()
或者您已拥有该产品的ID,而无需致电SCOPE_IDENTITY()
,并且可以使用该ID在table1
上插入