【问题标题】:How to call Stored Procedures (with 2 parameters) in a Stored Procedure?如何在存储过程中调用存储过程(带有 2 个参数)?
【发布时间】:2013-07-01 05:44:49
【问题描述】:

我有具有相同参数(服务器名称和日期)的存储过程。我想编写一个存储过程并在该 SP 中执行它们(称为 SP_All)。

CREATE PROCEDURE [dbo].[SP_All]
AS
BEGIN
exec sp_1   @myDate datetime, @ServerName sysname
exec sp_2   @myDate datetime, @ServerName sysname
exec sp_3   @myDate datetime, @ServerName sysname
exec sp_4   @myDate datetime, @ServerName sysname
END
Go 

错误:必须声明标量变量“@myDate”。

【问题讨论】:

  • 放参数/@myDate datetime, /@ServerName sysname
  • 附注:您应该为您的存储过程使用sp_ 前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免 sp_ 并使用其他东西作为前缀 - 或者根本不使用前缀!
  • 虽然您的问题是一个基本问题,但 +1 用于添加完整的代码示例、完整的错误消息以及对代码应该做什么的解释。太多的问题至少缺少其中一个...

标签: sql sql-server stored-procedures parameters sqlparameter


【解决方案1】:

我在这里看到两个问题:

  1. 您的过程显然有两个参数,@myDate@ServerName,您还没有声明它们。通过在过程名称和 AS 之间添加名称和类型来实现。
  2. 当调用sp_1到sp_4时,不需要再次指定参数的数据类型(这已经被声明处理了,见第1点)。

    CREATE PROCEDURE [dbo].[SP_All]
        @myDate datetime,
        @ServerName sysname
    AS
    BEGIN
        exec sp_1 @myDate, @ServerName
        exec sp_2 @myDate, @ServerName
        exec sp_3 @myDate, @ServerName
        exec sp_4 @myDate, @ServerName
    END
    

【讨论】:

  • 亲爱的 Heinzi、marc_s 和 Devart 感谢 cmets。现在可以了!我知道这是一个基本问题。希望我能像你们一样成为专家。再次非常感谢。
【解决方案2】:

试试这个 -

CREATE PROCEDURE [dbo].[SP_All]

       @myDate DATETIME
     , @ServerName SYSNAME

AS BEGIN

     EXEC dbo.sp_1 @myDate, @ServerName
     EXEC dbo.sp_2 @myDate, @ServerName
     EXEC dbo.sp_3 @myDate, @ServerName
     EXEC dbo.sp_4 @myDate, @ServerName

END

【讨论】:

    【解决方案3】:

    你执行存储过程的方式不对

    exec sp_1 @myDate datetime, @ServerName sysname
    

    语法完全错误。

    当你必须执行带参数的存储过程时,首先声明参数并传递它..

    declare @myDate datetime
    declare @ServerName sysname
    
    exec sp_1 @myDate, @ServerName
    

    这是正确的方法..

    【讨论】:

    • 这里有个误区。我已经在其他 SP 中声明了所有参数,现在我只需要执行它们。 Heinzi 和 Devart 的答案是正确且有效的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多