Как вызвать хранимые процедуры (с двумя параметрами) в хранимой процедуре?

У меня есть хранимые процедуры с одинаковыми параметрами (имя сервера и дата). Я хочу написать хранимую процедуру и выполнить ее в этом 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
Уважаемый Heinzi, 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, и теперь мне просто нужно было их выполнить. Ответы Хайнци и Деварта верны и работают. - person Raha; 04.07.2013