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?

Antworten:


230

Sie benötigen keine EXEC-Klausel. Einfach benutzen

proc_name paramValue1, paramValue2

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


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'

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'

4
    EXECUTE [or EXEC] procedure_name
  @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value',
    @parameter_z_name = 'parameter_z_value'

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.


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 

-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...


-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.


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.

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.