【问题标题】:How to call first SQL Server stored procedure to second stored procedure如何将第一个 SQL Server 存储过程调用到第二个存储过程
【发布时间】:2017-11-24 16:44:19
【问题描述】:

我有三张桌子:

  • TB1 : P (p_id (pk),p_name,p_description)
  • TB2: PV (pv_id (pk),p_id(fk),v_id(fk),cost)
  • TB3:V(V_id(pk),名称)

我在下面使用了 SQL Server 存储过程“Addp”,它在被调用时插入 p_namep_description

CREATE PROCEDURE AddP 
    (@name CHAR(50), 
     @description VARCHAR(255)) 
AS
BEGIN
    DECLARE @PCount INT

    SELECT @PCount = Count(P_ID) 
    FROM P
    WHERE P_Name= @name

    IF @PCount = 0
    BEGIN
        INSERT INTO P(P_Name, P_Description)
        VALUES(@name, @description)
    END

    RETURN @@IDENTITY
END

现在,我想创建另一个过程,我可以在其中插入“v_id”和成本以及“Addp”存储过程。我的第二个 SP 如下所示。我的问题是我应该如何将我的第一个存储过程调用到第二个新存储过程中。这样当我执行第二个存储过程时,我应该能够一次性插入 p_name,p_description,vi,cost 一切?

CREATE PROCEDURE AddPWithV (@vi int, @cost decimal(12,4))
AS
BEGIN

        INSERT INTO PV (V_ID, Cost)
        VALUES(@vi, @cost)
    Return @@IDENTITY
END;

我是存储过程的新手。所以,请指导我进行解释。 任何帮助表示赞赏! 提前致谢!

【问题讨论】:

  • 更多归档是什么意思?
  • @Mr.AF.. 这是错字。它必须是字段..以便我可以调用该过程并可以为这些字段插入值
  • 如果 v_id 和 cost 列在 P 中不存在以托管它们,则无法添加数据。
  • 不要使用@@IDENTITY,而是使用SCOPE_IDENTITY() - 请参阅stackoverflow.com/questions/1920558/…

标签: sql sql-server sql-server-2014


【解决方案1】:

只需声明两个变量 如下图:

DECLARE @_vid INT
DECLARE @_cost numeric(18,2) // as per your column daya type 

Select @_vid =vid from TB3 where name =@name ;

Select  @_cost = cost from TB2 where 
P_id in (select p_id from TB1 where name =@name );

现在你有了两个值,你可以在任何你想要的地方插入..

【讨论】:

  • ..我的问题是我只想从 TB3 插入 v_id
  • 您在 storeprocedure 中传递 Name ,从该名称中您可以从 TB3 获取 vid,如我的回答所示。
猜你喜欢
  • 1970-01-01
  • 2012-02-10
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
相关资源
最近更新 更多