10

我有具有相同参数(服务器名称和日期)的存储过程。我想编写一个存储过程并在该 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”。

4

3 回答 3

10

我在这里看到两个问题:

  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
    
于 2013-07-01T05:47:40.327 回答
4

试试这个——

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
于 2013-07-01T05:47:39.587 回答
2

您以错误的方式执行存储过程

exec sp_1 @myDate datetime, @ServerName sysname

是完全错误的语法。

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

declare @myDate datetime
declare @ServerName sysname

exec sp_1 @myDate, @ServerName

这是正确的做法..

于 2013-07-02T05:39:33.840 回答