如何在SQL Developer中执行SQL Server存储过程?


148

我已经获得一个SQL Server数据库用户帐户,该数据库仅具有执行存储过程的特权。我将JTDS SQL Server JDBC jar文件添加到SQL Developer,并将其添加为第三方JDBC驱动程序。我可以成功登录到SQL Server数据库。运行该过程的语法如下:

EXEC proc_name 'paramValue1' 'paramValue2'

当我将其作为语句或脚本运行时,出现以下错误:

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

我尝试将语句包装在中BEGIN/END,但得到相同的错误。是否可以从SQL Developer调用该过程?如果是这样,我需要使用什么语法?

Answers:


231

您不需要EXEC子句。只需使用

proc_name paramValue1, paramValue2

(并且您需要逗号(如Misnomer所述))


8
此规则是否有例外?我似乎收到错误“'sp_dev_mystoredproc'附近的语法不正确”。使用此语法执行时。
nuzzolilo 2015年

2
EXEC之前proc_name中,需要在我的情况
塞萨尔·莱昂

3
我强烈建议您访问@MuriloKunze建议的链接。要知道非常重要。
RBT

@RBT谁的链接在哪里?
CervEd

72

你不见了 ,

EXEC proc_name 'paramValue1','paramValue2'

1
我添加了缺少的逗号,但是再次出现同样的错误。
sdoca 2010年

你有什么参数,如果他们是VARCHAR那么只需要加引号...以外想不出什么...你可以尝试这只是仅此,在新的Windows的EXEC proc_name,看看它是否会询问您第二个参数......那么至少你知道你的是语法时才right..if不工作意味着你probanly不要有正确的存储过程的名称...尝试全限定名..
维沙尔

我删除了第二个参数,并且仍然是相同的错误。我认为它根本没有正在运行的程序。EXEC命令没有突出显示语法,因此即使连接到SQL Server数据库,我猜开发人员也无法识别它。但是我在网上找不到任何内容可以确认/否认。
sdoca 2010年

Yea..try选择一些记录,并执行一些简单的命令,看看是否有任何在所有的作品..好运..!
维沙尔

不幸的是,我的用户仅具有运行存储过程的特权。
sdoca

18

您需要这样做:

    exec procName 
    @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

如果存储过程目标是INSERT在声明了Identity字段的表上执行,那么在这种情况下@paramValue1,应声明该字段并只需传递值0,因为它将是自动递增的。


0

我知道这是旧的。但这可能会帮助其他人。

我在BEGIN / END之间添加了SP调用功能。这是一个工作脚本。

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

如果您只需要proc_name 'paramValue1' , 'paramValue2'... 同时执行存储过程 ,则在执行多个查询(如一个选择查询和存储过程)时,您必须添加 select * from tableName EXEC proc_name paramValue1 , paramValue2...



-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
欢迎来到stackoverflow。进行游览,以了解该站点的工作原理及其用途。你的答案是什么?
Devraj Gadhavi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.