Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从另一个存储过程SQL Server调用存储过程_Sql_Sql Server_Sql Server 2005_Stored Procedures - Fatal编程技术网

从另一个存储过程SQL Server调用存储过程

从另一个存储过程SQL Server调用存储过程,sql,sql-server,sql-server-2005,stored-procedures,Sql,Sql Server,Sql Server 2005,Stored Procedures,我有3个insert存储过程,每个SP在2个不同的表中插入数据 Table 1 Table 2 idPerson idProduct name productName phoneNumber productdescription FK-idProduct 表1的SP表2的SP create procedure test1

我有3个insert存储过程,每个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添加一个输出参数,并在插入后直接使用以下命令将其设置为新id:

SELECT @NewIdOutputParam = SCOPE_IDENTITY()
然后在test1中,按如下方式检索它:

DECLARE @NewId INTEGER
EXECUTE test2 @NewId OUTPUT
-- Now use @NewId as needed

首先,如果
table2
的idProduct是一个标识,则在该表上设置
identity\u insert
之前,不能显式插入它

SET IDENTITY_INSERT table2 ON;
在插入之前

因此,您可以选择其中一种,修改存储的第二个ID,并仅使用参数
productName
productDescription
调用它,然后获取新ID

EXEC test2 'productName', 'productDescription'
SET @newID = SCOPE_IDENTIY()

或者您已经有了产品的ID,您不需要调用
SCOPE\u IDENTITY()
,并且可以使用该ID在
table1
上进行插入它会在table1中插入idPerson、name、phone和idProduct,在table2中插入idProduct、productName和productDescription吗?@@SCOPE\u IDENTITY不是一回事。使用SCOPE_IDENTITY()注意,除非在2012年之前的SQL版本中使用MAX_DOP=1,否则不能依靠SCOPE_IDENTITY()返回准确的结果。(见此处:)