【问题标题】:How do I call an stored procedure from another stored procedure in SQL Server?如何从 SQL Server 中的另一个存储过程调用存储过程?
【发布时间】:2012-01-06 16:28:25
【问题描述】:

我有一个主存储过程,它插入 3 个 varchar 字段、姓名、地址和电话号码以及其他 3 个从表中的外键插入 ID 的字段,这两个外键字段也使用插入存储过程来插入它们自己的数据。如何从主 SP 调用这些存储过程来插入 varchar 字段和执行时生成的外键字段?

Table 1          Table 2         Table 3
id,              id2,            id3,
name1,           name2,          name3, 
address1,        address2,       address3,
phoneNumber1,    phoneNumber2,   phoneNumber3
id2,
id3,

create procedure table1    
@id int,
@name1 varchar(30),
@address1 varchar(100),
@phoneNumber1 varchar(30)
as
    BEGIN
set nocount on;

Insert into table1
           (id,
           name,
           address,
           phoneNumber)
    values(
           @id,
           @name,
           @address,
           @phoneNumber)
    END

------After inserting the data into table 1, I want to call the SP of table 2 and 3---

EXEC SPTable2

【问题讨论】:

    标签: sql sql-server sql-server-2005


    【解决方案1】:

    从主程序:

    Insert into table1 (...)
    exec yourProcName @param='foo'
    

    您应该让每个 proc 返回您需要的数据集,然后主 proc 调用它们中的每一个并执行INSERT INTO,如上所示。

    table1 的表定义必须完全匹配其他过程返回的结果集的列数和数据类型。

    如果你不能保证这个条件,你最好写一个返回表的函数,这样你就可以做一个insert into table1 (....) select col1, col2, etc from fnFoo(@param)

    【讨论】:

    • 其他程序也在自己的表中插入数据基本上我只是想从主SP执行它们来插入3个varchar字段和表2和3的id
    • @arturor 当您说“他们自己的表中的数据”时,您是指临时表吗?但同样,如果只是调用 proc 让他们自己做自己的事情,只需执行 exec yourprocname。我希望你不是指global temporary tables,因为这很少是一个好主意。想象一下你的 proc 同时运行...
    • 不,它们不是临时表,它们有自己的 SP 来插入数据
    • @arturor 然后我看不到问题。顺便说一句,我不建议您将存储过程命名为与表相同。在前面添加 usp(用户存储过程)或其他适合您的指示符是一个很好的做法,以区分 procs、function、view 等。
    • 哦,好吧,那我只添加 EXEC SPTable2,然后添加 EXEC SPTable3
    猜你喜欢
    • 2012-02-10
    • 1970-01-01
    • 2010-11-14
    • 2021-01-26
    • 2014-09-17
    • 1970-01-01
    • 2011-05-08
    • 2011-05-05
    相关资源
    最近更新 更多