2013-07-01 171 views
7

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

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”。

+1

放参数/ @指明MyDate日期时间,/ @服务器sysname – chetan

+4

注意:你不应该为存储过程使用'sp_'前缀。微软已经保留了这个前缀以供自己使用(参见*命名存储过程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你将来有可能冒着名字冲突的风险。 [这对你的存储过程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是简单地避免使用'sp_'并将其他内容用作前缀 - 或者根本没有前缀! –

+1

虽然您的问题是基本问题,但为了添加完整的代码示例,请输入完整的错误消息并说明代码应执行的操作。太多的问题至少缺少其中之一... – Heinzi

回答

6

在这里我看到两个问题:

  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 
    
+0

亲爱的Heinzi,marc_s和Devart感谢您的评论。它现在有效!我知道这是一个基本问题。希望我会像大家一样成为专家。再次感谢。 – Raha

3

尝试这一个 -

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 
1

正在执行存储过程的错误的方式

exec sp_1 @myDate datetime, @ServerName sysname 

是完全错误的语法。

当你执行与参数的存储过程,首先要声明的参数,并通过它..

declare @myDate datetime 
declare @ServerName sysname 

exec sp_1 @myDate, @ServerName 

这是正确的做法..

+0

这是一个误解。我已经在其他SP中声明了所有参数,现在我只需要执行它们。 Heinzi nd Devart的答案是正确的,并且正在工作。 – Raha

相关问题