7

У меня хранились процедуры с одинаковыми параметрами (имя и дата сервера). Я хочу написать хранимую процедуру и Exec их в этом 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".

+1

параметры пут/@ MyDate дата и время,/@ ServerName sysname – chetan

+4

Примечание: вы не должны ** использовать префикс 'sp_' для ваших хранимых процедур. Microsoft [зарезервировала этот префикс для собственного использования (см. * Именование сохраненных процедур *)] (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

Хотя ваш вопрос является базовым, +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