Como executar o procedimento armazenado do SQL Server no SQL Developer?

148

Recebi uma conta de usuário em um banco de dados do SQL Server que só possui privilégios para executar um procedimento armazenado. Adicionei o arquivo jar JDBC do SQL Server JTDS ao SQL Developer e o adicionei como um driver JDBC de terceiros. Posso efetuar login com êxito no banco de dados do SQL Server. Foi-me dada esta sintaxe para executar o procedimento:

EXEC proc_name 'paramValue1' 'paramValue2'

Quando executo isso como uma instrução ou um script, recebo este erro:

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

Tentei envolver a instrução BEGIN/END, mas obtive o mesmo erro. É possível chamar o procedimento do SQL Developer? Em caso afirmativo, qual sintaxe eu preciso usar?

sdoca
fonte

Respostas:

231

Você não precisa da cláusula EXEC. Basta usar

proc_name paramValue1, paramValue2

(e você precisa de vírgulas, como Misnomer mencionou)

Tema
fonte
8
Há alguma exceção a esta regra? Parece que estou recebendo o erro "Sintaxe incorreta perto de 'sp_dev_mystoredproc'." ao executar com esta sintaxe.
Nuzzolilo 24/10
2
Proc_name antes EXEC é exigido no meu caso
César León
3
Eu recomendo fortemente visitar o link sugerido por @MuriloKunze. Muito importante saber.
RBT 27/07
@RBT quem está link onde?
CervEd 30/06
72

Você está faltando ,

EXEC proc_name 'paramValue1','paramValue2'
Vishal
fonte
1
Adicionei a vírgula ausente, mas, novamente, ainda recebo o mesmo erro.
Sdoca
Quais são os seus parâmetros, se eles são varchar, então você só precisa das aspas ... além disso, não consegue pensar em nada ... você pode tentar isso, basta executar apenas isso em uma nova janela - EXEC proc_namee ver se ele pede o segundo parâmetro ... então, pelo menos você sabe que seu sytax é right..if não funciona significa que você probanly não tem direito armazenado nome proc ... tente nome qualificado completo ..
Vishal
Eu removi o segundo paramater e ainda o mesmo erro. Eu não acho que esteja executando o procedimento. O comando EXEC não está destacado na sintaxe, portanto, acho que o desenvolvedor não o reconhece, mesmo que a conexão seja com um banco de dados do SQL Server. Mas não consigo encontrar nada na web para confirmar / negar isso.
Sdoca
Sim .. tente selecionar alguns registros e executar alguns comandos simples para ver se alguma coisa funciona! .. boa sorte ..
Vishal
Infelizmente, meu usuário só tem privilégios para executar o procedimento armazenado.
Sdoca
18

Você precisa fazer isso:

    exec procName 
    @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value',
    @parameter_z_name = 'parameter_z_value'
Daniel
fonte
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
fonte
0
EXEC proc_name @paramValue1 = 0, @paramValue2 = 'some text';
GO

Se o objetivo do Procedimento Armazenado for executar um INSERTem uma tabela que tenha um campo Identidade declarado, o campo, nesse cenário @paramValue1, deverá ser declarado e apenas passar o valor 0, porque será incrementado automaticamente.

chri3g91
fonte
0

Eu sei que este é o antigo. Mas isso pode ajudar os outros.

Eu adicionei a função de chamada SP entre BEGIN / END. Aqui está um script de trabalho.

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
fonte
-3

Se você simplesmente precisar executar o procedimento armazenado proc_name 'paramValue1' , 'paramValue2'... ao mesmo tempo, estará executando mais de uma consulta, como uma consulta de seleção e o procedimento armazenado, que deverá adicionar select * from tableName EXEC proc_name paramValue1 , paramValue2...

Joel Prabhu
fonte
-8

Os procedimentos armazenados podem ser executados na ferramenta de desenvolvedor sql usando a sintaxe abaixo

BEGIN nome do procedimento (); FIM;

Se houver algum parâmetro, ele deverá ser passado.

Santhosh
fonte
Por que você está anexando uma única instrução por um bloco de instruções? Você precisa fazer isso apenas para uma série de instruções 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.
user3110888
fonte
1
Bem-vindo ao stackoverflow. Faça este tour para conhecer como este site funciona e para que serve. Qual é sua resposta?
Devraj Gadhavi