Как да извикам съхранени процедури (с 2 параметъра) в съхранена процедура?

Имам съхранени процедури със същите параметри (име на сървъра и дата). Искам да напиша съхранена процедура и да ги изпълня в този 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".


person Raha    schedule 01.07.2013    source източник
comment
поставете параметри /@myDate datetime, /@ServerName sysname   -  person chetan    schedule 01.07.2013
comment
Странична бележка: не трябва да използвате префикса sp_ за вашите съхранени процедури. Microsoft е запазила този префикс за своя собствена употреба ( вижте Именуване на съхранени процедури) и рискувате да се сблъскате с имената някога в бъдеще. Това също е лошо за ефективността на съхранената ви процедура. Най-добре е просто да избягвате sp_ и да използвате нещо друго като префикс - или изобщо без префикс!   -  person marc_s    schedule 01.07.2013
comment
Въпреки че въпросът ви е основен, +1 за добавяне на примерен пълен код, пълното съобщение за грешка и обяснение какво трябва да прави кодът. Твърде много въпроси нямат поне един от тези...   -  person Heinzi    schedule 01.07.2013


Отговори (3)


Тук виждам два проблема:

  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
    
person Heinzi    schedule 01.07.2013
comment
Уважаеми Хайнци, marc_s и Devart, благодаря за коментарите. Сега работи! Знам, че е основен въпрос. Надявам се, че ще бъда експерт като всички вас. Благодаря много отново. - person Raha; 01.07.2013

Опитай това -

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
person Devart    schedule 01.07.2013

Изпълнявате съхранени процедури по грешен начин

exec sp_1 @myDate datetime, @ServerName sysname

е напълно грешен синтаксис.

Когато трябва да изпълните съхранена процедура с параметри, първо декларирайте параметър и го предайте.

declare @myDate datetime
declare @ServerName sysname

exec sp_1 @myDate, @ServerName

Това е правилният подход..

person Bibek Gautam    schedule 02.07.2013
comment
Ето едно недоразумение. Декларирах всички параметри в друг SP и сега просто трябваше да ги изпълня. Отговорите на Heinzi и Devart са правилни и работят. - person Raha; 04.07.2013