7

Ich habe Prozeduren mit denselben Parametern (Servername und Datum) gespeichert. Ich möchte eine gespeicherte Prozedur schreiben und sie in diesem SP (genannt SP_All) ausführen.Wie Stored Procedures (mit 2 Parametern) in einer gespeicherten Prozedur aufgerufen werden?

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 

Fehler: Muss die Skalarvariable "@myDate" deklarieren.

+1

Put-Parameter/@ myDate Datetime,/@ Server sysname – chetan

+4

Randnotiz: Sie sollten ** nicht ** das Präfix 'sp_' für Ihre gespeicherten Prozeduren verwenden. Microsoft hat [dieses Präfix für seine eigene Verwendung reserviert (siehe * Gespeicherte Prozeduren benennen *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx), und Sie riskieren irgendwann in der Zukunft einen Namenskonflikt. [Es ist auch schlecht für die Leistung Ihrer gespeicherten Prozedur] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Es ist am besten, einfach 'sp_' zu vermeiden und etwas anderes als Präfix zu verwenden - oder gar kein Präfix! –

+1

Obwohl Ihre Frage grundlegend ist, +1 für das Hinzufügen eines vollständigen Codebeispiels, die vollständige Fehlermeldung und eine Erläuterung dessen, was der Code tun soll. Zu vielen Fragen fehlt mindestens eine davon ... – Heinzi

Antwort

6

Ich sehe zwei Probleme hier:

  1. Ihre Prozedur dauert scheinbar zwei Parameter, @myDate und @ServerName, die Sie noch nicht angemeldet haben. Tun Sie dies, indem Sie die Namen und die Typen zwischen dem Prozedurnamen und AS hinzufügen.
  2. Beim Aufruf von sp_1 bis sp_4 muss der Datentyp der Parameter nicht erneut angegeben werden (dies wurde von der Deklaration übernommen, siehe Punkt 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

Liebe Heinzi, marc_s und Devart danke für Kommentare. Es funktioniert jetzt! Ich weiß, dass es eine grundlegende Frage ist. Hoffe ich werde ein Experte sein wie ihr alle. Nochmals vielen Dank. – Raha

3

Versuchen Sie dieses -

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

Sie ausführen Verfahren die falsche Art und Weise gespeichert

exec sp_1 @myDate datetime, @ServerName sysname 

ist völlig falsche Syntax.

Wenn Sie eine gespeicherte Prozedur mit Parametern auszuführen, erste Parameter deklarieren und es passieren ..

declare @myDate datetime 
declare @ServerName sysname 

exec sp_1 @myDate, @ServerName 

Dies ist der richtige Ansatz ..

+0

Hier ist ein Missverständnis. Ich habe alle Parameter in anderen SP deklariert und jetzt musste ich sie nur ausführen. Heinzi nd Devart antwortet "sind korrekt und funktionieren. – Raha