Wie führe ich eine gespeicherte SQL Server-Prozedur in SQL Developer aus?

148

Ich habe ein Benutzerkonto für eine SQL Server-Datenbank erhalten, die nur zum Ausführen einer gespeicherten Prozedur berechtigt ist. Ich habe die JTDS SQL Server JDBC-JAR-Datei zu SQL Developer hinzugefügt und als JDBC-Treiber eines Drittanbieters hinzugefügt. Ich kann mich erfolgreich bei der SQL Server-Datenbank anmelden. Ich erhielt diese Syntax zum Ausführen der Prozedur:

EXEC proc_name 'paramValue1' 'paramValue2'

Wenn ich dies entweder als Anweisung oder als Skript ausführe, wird folgende Fehlermeldung angezeigt:

Error starting at line 1 in command:
EXEC proc_name 'paramValue1' 'paramValue2'
Error report:
Incorrect syntax near the keyword 'BEGIN'.

Ich habe versucht, die Anweisung einzuschließen BEGIN/END, erhalte aber den gleichen Fehler. Ist es möglich, die Prozedur von SQL Developer aus aufzurufen? Wenn ja, welche Syntax muss ich verwenden?

sdoca
quelle

Antworten:

230

Sie benötigen keine EXEC-Klausel. Einfach benutzen

proc_name paramValue1, paramValue2

(und Sie benötigen Kommas wie Misnomer erwähnt)

Tema
quelle
8
Gibt es Ausnahmen von dieser Regel? Ich erhalte anscheinend die Fehlermeldung "Falsche Syntax in der Nähe von 'sp_dev_mystoredproc'." bei der Ausführung mit dieser Syntax.
Nuzzolilo
2
EXEC vor proc_name ist in meinem Fall erforderlich
César León
3
Ich würde dringend empfehlen, den von @MuriloKunze vorgeschlagenen Link zu besuchen. Sehr wichtig zu wissen.
RBT
@RBT wer ist wo verlinken?
CervEd
71

Du fehlst ,

EXEC proc_name 'paramValue1','paramValue2'
Vishal
quelle
1
Ich habe das fehlende Komma hinzugefügt, erhalte aber immer noch den gleichen Fehler.
SDoca
Was sind Ihre Parameter, wenn sie varchar sind, dann brauchen nur Sie die Anführungszeichen ... ansonsten fällt Ihnen nichts ein ... Sie könnten versuchen, dies nur in einem neuen Fenster auszuführen - EXEC proc_nameund sehen, ob Sie danach gefragt werden zweiter Parameter ... dann wissen Sie zumindest, dass Ihre Systemsteuer richtig ist. Wenn dies nicht funktioniert, bedeutet dies, dass Sie wahrscheinlich keinen richtigen gespeicherten Prozessnamen haben. Versuchen Sie es mit einem qualifizierten Namen.
Vishal
Ich habe den zweiten Parameter entfernt und immer noch den gleichen Fehler. Ich glaube nicht, dass es überhaupt läuft. Der EXEC-Befehl ist nicht syntaktisch hervorgehoben, daher wird er von Developer vermutlich nicht erkannt, obwohl die Verbindung zu einer SQL Server-Datenbank besteht. Aber ich kann im Web nichts finden, was das bestätigt / leugnet.
SDoca
Ja ... versuchen Sie einige Datensätze auszuwählen und einige einfache Befehle auszuführen, um zu sehen, ob überhaupt etwas funktioniert! .. Viel Glück ..
Vishal
Leider hat mein Benutzer nur Berechtigungen zum Ausführen der gespeicherten Prozedur.
SDoca
18

Sie müssen dies tun:

    exec procName 
    @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value',
    @parameter_z_name = 'parameter_z_value'
Daniel
quelle
4
    EXECUTE [or EXEC] procedure_name
  @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value',
    @parameter_z_name = 'parameter_z_value'
Prasanna Gulhane
quelle
0
EXEC proc_name @paramValue1 = 0, @paramValue2 = 'some text';
GO

Wenn das Ziel der gespeicherten Prozedur darin besteht, INSERTeine Tabelle mit einem deklarierten Identitätsfeld auszuführen @paramValue1, sollte das Feld in diesem Szenario deklariert werden und nur den Wert 0 übergeben, da es automatisch inkrementiert wird.

chri3g91
quelle
0

Ich weiß, das ist der alte. Aber das kann anderen helfen.

Ich habe die SP-Aufruffunktion zwischen BEGIN / END hinzugefügt. Hier ist ein funktionierendes Skript.

ALTER Proc [dbo].[DepartmentAddOrEdit]
@Id int,
@Code varchar(100),
@Name varchar(100),
@IsActive bit ,
@LocationId int,
@CreatedBy int,
@UpdatedBy int
AS
    IF(@Id = 0)

    BEGIN
    INSERT INTO Department (Code,Name,IsActive,LocationId,CreatedBy,UpdatedBy,CreatedAt)
        VALUES(@Code,@Name,@IsActive,@LocationId,@CreatedBy,@UpdatedBy,CURRENT_TIMESTAMP)

    EXEC dbo.LogAdd @CreatedBy,'DEPARTMENT',@Name
    END

    ELSE

    UPDATE Department SET
        Code = @Code,
        Name = @Name,
        IsActive = @IsActive,
        LocationId = @LocationId,
        CreatedBy = @CreatedBy,
        UpdatedBy = @UpdatedBy,
        UpdatedAt =  CURRENT_TIMESTAMP 
    where Id = @Id 
Roshan Perera
quelle
-3

Wenn Sie Ihre gespeicherte Prozedur nur proc_name 'paramValue1' , 'paramValue2'... gleichzeitig ausführen müssen, führen Sie mehr als eine Abfrage aus, z. B. eine Auswahlabfrage und eine gespeicherte Prozedur, die Sie hinzufügen müssen select * from tableName EXEC proc_name paramValue1 , paramValue2...

Joel Prabhu
quelle
-8

Die gespeicherten Prozeduren können im SQL Developer Tool mit der folgenden Syntax ausgeführt werden

BEGIN prozedurname (); ENDE;

Wenn es irgendwelche Parameter gibt, muss es übergeben werden.

Santhosh
quelle
Warum schließen Sie eine einzelne Anweisung in einen Anweisungsblock ein? Sie müssen dies nur für eine Reihe von T-SQL-Anweisungen tun .
David Ferenczy Rogožan
-11
Select * from Table name ..i.e(are you save table name in sql(TEST) k.

Select * from TEST then you will execute your project.
user3110888
quelle
1
Willkommen bei stackoverflow. Nehmen Sie an dieser Tour teil, um zu erfahren, wie diese Website funktioniert und wofür sie gedacht ist. Wie ist deine Antwort?
Devraj Gadhavi