从另一个存储过程的SQL Server调用存储过程
问题描述:
我有3个插入件的存储过程在2页不同的表从另一个存储过程的SQL Server调用存储过程
每个SP数据插入Table 1 Table 2
idPerson idProduct
name productName
phoneNumber productdescription
FK-idProduct
SP为表1 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并在表格中插入FK-ID 1
答
只需要致电test2
从test1
如:
EXEC test2 @newId, @prod, @desc;
确保使用获得@id
:
SELECT @newId = @@SCOPE_IDENTITY
答
你可以OUTPUT参数添加到Test2和使用INSERT后直接将其设置为新的ID:
SELECT @NewIdOutputParam = SCOPE_IDENTITY()
然后在test1中,像这样检索它:
DECLARE @NewId INTEGER
EXECUTE test2 @NewId OUTPUT
-- Now use @NewId as needed
+2
请注意,除非您在2012版之前的SQL版本上使用MAX_DOP = 1,否则不能依赖SCOPE_IDENTITY()来返回准确的结果。(请参见:http://connect.microsoft.com/SQLServer/feedback/细节/ 328811 /) – 2013-05-02 15:57:46
答
所有的
首先,如果table2
的idProduct是一个身份,你不能,直到你在插入之前该表
SET IDENTITY_INSERT table2 ON;
设置IDENTITY_INSERT
插入它明确。
所以两个一,修改你的第二个存储,并只与参数productName
和productDescription
调用它,然后获得新的ID
EXEC test2 'productName', 'productDescription'
SET @newID = SCOPE_IDENTIY()
,或者你已经拥有的产品的ID和你不”吨需要调用SCOPE_IDENTITY()
,可以使上的插件table1
与ID
将它做的idPerson,姓名,电话和idProduct插入table1中和idProduct,产品名称和产品描述表2中? – 2012-01-13 23:41:20
@@ SCOPE_IDENTITY不是问题。使用SCOPE_IDENTITY() – MPaul 2014-07-21 14:38:59