Comment exécuter une procédure stockée SQL Server dans SQL Developer?


148

J'ai reçu un compte utilisateur sur une base de données SQL Server qui ne dispose que de privilèges pour exécuter une procédure stockée. J'ai ajouté le fichier jar JTDS SQL Server JDBC à SQL Developer et l'ai ajouté en tant que pilote JDBC tiers. Je peux me connecter avec succès à la base de données SQL Server. J'ai reçu cette syntaxe pour exécuter la procédure:

EXEC proc_name 'paramValue1' 'paramValue2'

Lorsque je l'exécute en tant que déclaration ou script, j'obtiens cette erreur:

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

J'ai essayé d'encapsuler la déclaration BEGIN/END, mais j'obtiens la même erreur. Est-il possible d'appeler la procédure depuis SQL Developer? Si oui, quelle syntaxe dois-je utiliser?

Réponses:


231

Vous n'avez pas besoin de clause EXEC. Utilisez simplement

proc_name paramValue1, paramValue2

(et vous avez besoin de virgules comme Misnomer mentionné)


8
Y a-t-il des exceptions à cette règle? Il semble que je reçoive l'erreur "Syntaxe incorrecte près de 'sp_dev_mystoredproc'." lors de l'exécution avec cette syntaxe.
nuzzolilo

2
EXEC préalable proc_name est requis dans mon cas
César León

3
Je recommanderais fortement de visiter le lien suggéré par @MuriloKunze. Très important à savoir.
RBT

@RBT qui est le lien où?
CervEd

72

Tu es absent ,

EXEC proc_name 'paramValue1','paramValue2'

1
J'ai ajouté la virgule manquante, mais encore une fois, j'obtiens toujours la même erreur.
sdoca

Quels sont vos paramètres s'ils sont varchar, alors seulement vous avez besoin des guillemets ... à part cela, vous ne pouvez rien penser ... vous pouvez essayer ceci, exécutez simplement ceci dans une nouvelle fenêtre - EXEC proc_nameet voir si cela vous demande le deuxième paramètre ... alors au moins vous savez que votre syntaxe est correcte..si ne fonctionne pas signifie que vous n'avez probablement pas le bon nom de proc stocké ... essayez le nom complet qualifié ..
Vishal

J'ai supprimé le deuxième paramètre et toujours la même erreur. Je ne pense pas du tout que ce soit une procédure en cours d'exécution. La commande EXEC n'est pas mise en surbrillance de la syntaxe, donc je suppose que Developer ne la reconnaît pas même si la connexion est à une base de données SQL Server. Mais je ne trouve rien sur le Web pour confirmer / nier cela.
sdoca

Oui .. essayez de sélectionner certains enregistrements et d'exécuter des commandes simples voir si quelque chose fonctionne! .. bonne chance ..
Vishal

Malheureusement, mon utilisateur ne dispose que des privilèges pour exécuter la procédure stockée.
sdoca

19

Vous devez faire ceci:

    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

Si l'objectif de la procédure stockée est d'effectuer un INSERTsur une table qui a un champ d'identité déclaré, le champ, dans ce scénario @paramValue1, doit être déclaré et passer simplement la valeur 0, car il sera auto-incrémenté.


0

Je sais que c'est l'ancien. Mais cela peut aider les autres.

J'ai ajouté la fonction d'appel SP entre BEGIN / END. Voici un script de travail.

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

Si vous avez simplement besoin d'exécuter votre procédure stockée proc_name 'paramValue1' , 'paramValue2'... en même temps, vous exécutez plusieurs requêtes comme une requête de sélection et une procédure stockée, vous devez ajouter select * from tableName EXEC proc_name paramValue1 , paramValue2...


-8

Les procédures stockées peuvent être exécutées dans l'outil de développement SQL en utilisant la syntaxe ci-dessous

BEGIN nom_procédure (); FIN;

S'il y a des paramètres, ils doivent être passés.


Pourquoi insérez-vous une seule instruction par un bloc d'instructions? Vous devez le faire pour une série d'instructions T-SQL uniquement.
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
Bienvenue dans stackoverflow. Faites cette visite pour découvrir comment ce site fonctionne et à quoi il sert. Quelle est ta réponse?
Devraj Gadhavi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.