Come eseguire la stored procedure di SQL Server in SQL Developer?


148

Mi è stato assegnato un account utente a un database SQL Server che ha solo i privilegi per eseguire una procedura memorizzata. Ho aggiunto il file jar JDBC JTDS SQL Server a SQL Developer e l'ho aggiunto come driver JDBC di terze parti. Posso accedere con successo al database di SQL Server. Mi è stata data questa sintassi per l'esecuzione della procedura:

EXEC proc_name 'paramValue1' 'paramValue2'

Quando eseguo questo come un'istruzione o uno script, ottengo questo errore:

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

Ho provato a racchiudere la dichiarazione BEGIN/END, ma ottengo lo stesso errore. È possibile chiamare la procedura da SQL Developer? In tal caso, quale sintassi devo usare?

Risposte:


231

Non è necessaria la clausola EXEC. Basta usare

proc_name paramValue1, paramValue2

(e hai bisogno di virgole come menzionato Misnomer)


8
Ci sono eccezioni a questa regola? Mi sembra che venga visualizzato l'errore "Sintassi errata vicino a" sp_dev_mystoredproc "." durante l'esecuzione con questa sintassi.
nuzzolilo,

2
Nel mio caso è richiesto EXEC proc_name prima
César León,

3
Consiglio vivamente di visitare il link suggerito da @MuriloKunze. Molto importante da sapere.
RBT,

@RBT chi è il link dove?
CervEd,

72

Ti manca ,

EXEC proc_name 'paramValue1','paramValue2'

1
Ho aggiunto la virgola mancante, ma di nuovo ottengo sempre lo stesso errore.
sdoca,

Quali sono i tuoi parametri se sono varchar quindi solo tu hai bisogno delle virgolette ... a parte questo non riesco a pensare a niente ... potresti provare questo basta eseguire solo questo in una nuova finestra- EXEC proc_namee vedere se ti chiede il secondo parametro ... allora almeno sai che il tuo sintassi è giusto ... se non funziona significa che probabilmente non hai il nome del processo memorizzato giusto ... prova il nome completo qualificato ..
Vishal

Ho rimosso il secondo parametro e ancora lo stesso errore. Non penso che stia eseguendo la procedura. Il comando EXEC non è evidenziato dalla sintassi, quindi suppongo che Developer non lo riconosca anche se la connessione è a un database SQL Server. Ma non riesco a trovare nulla sul Web per confermarlo / negarlo.
sdoca,

Sì ... seleziona alcuni record ed esegui alcuni semplici comandi per vedere se qualcosa funziona! .. buona fortuna ..
Vishal

Sfortunatamente, il mio utente ha solo i privilegi per eseguire la procedura memorizzata.
sdoca,

19

Devi fare questo:

    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

Se l'obiettivo della Stored Procedure è eseguire un INSERTsu una tabella in cui è dichiarato un campo Identity, il campo, in questo scenario @paramValue1, deve essere dichiarato e passare semplicemente il valore 0, poiché sarà auto-incrementato.


0

So che questo è quello vecchio. Ma questo può aiutare gli altri.

Ho aggiunto la funzione di chiamata SP tra BEGIN / END. Ecco una sceneggiatura funzionante.

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

Se devi semplicemente eseguire la procedura memorizzata proc_name 'paramValue1' , 'paramValue2'... nello stesso momento in cui stai eseguendo più di una query come una query selezionata e una procedura memorizzata devi aggiungere select * from tableName EXEC proc_name paramValue1 , paramValue2...


-8

Le procedure memorizzate possono essere eseguite nello strumento di sviluppo sql utilizzando la sintassi seguente

INIZIA procedurename (); FINE;

Se ci sono parametri, allora deve essere passato.


Perché stai racchiudendo una singola istruzione da un blocco di istruzioni? Devi farlo solo per una serie di istruzioni T-SQL .
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
Benvenuto in StackOverflow. Fai questo tour per scoprire come funziona questo sito ea cosa serve. Qual è la tua risposta?
Devraj Gadhavi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.