![](/img/trans.png)
[英]Calling MySQL stored procedure / query from SQL Server stored procedure
[英]Calling stored procedure from another stored procedure SQL Server
我有 3 个插入存储过程,每个 SP 在 2 个不同的表中插入数据
Table 1 Table 2
idPerson idProduct
name productName
phoneNumber productdescription
FK-idProduct
表 1 的 SP 表 2 的 SP
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
只需从test1
调用test2
,如:
EXEC test2 @newId, @prod, @desc;
确保使用 SCOPE_IDENTITY() 获取@id
,它获取插入到同一范围内的标识列中的最后一个标识值:
SELECT @newId = SCOPE_IDENTITY()
您可以向 test2 添加一个 OUTPUT 参数,并在 INSERT 之后直接将其设置为新的 id 使用:
SELECT @NewIdOutputParam = SCOPE_IDENTITY()
然后在 test1 中,像这样检索它:
DECLARE @NewId INTEGER
EXECUTE test2 @NewId OUTPUT
-- Now use @NewId as needed
首先,如果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
上进行插入
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.