163

我已经获得了一个 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 调用该过程?如果是这样,我需要使用什么语法?

4

11 回答 11

253

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

proc_name paramValue1, paramValue2

(而且你需要逗号作为 Misnomer 提到的)

于 2012-09-21T07:24:18.583 回答
79

你不见了,

EXEC proc_name 'paramValue1','paramValue2'
于 2010-11-09T17:56:18.480 回答
22

你需要这样做:

exec procName 
@parameter_1_Name = 'parameter_1_Value', 
@parameter_2_name = 'parameter_2_value',
@parameter_z_name = 'parameter_z_value'
于 2013-07-12T16:09:42.850 回答
4
EXECUTE [or EXEC] procedure_name
@parameter_1_Name = 'parameter_1_Value', 
@parameter_2_name = 'parameter_2_value',
@parameter_z_name = 'parameter_z_value'
于 2015-03-30T13:44:35.200 回答
1

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

我在 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 
于 2018-05-21T11:34:30.647 回答
1

您需要在 paramValue1 和 paramValue2 之间添加一个“,”。你错过了。

EXEC proc_name 'paramValue1','paramValue2'
于 2020-12-09T14:03:45.147 回答
0
EXEC proc_name @paramValue1 = 0, @paramValue2 = 'some text';
GO

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

于 2016-11-07T17:16:47.460 回答
0

有两种方式我们可以调用存储过程

  1. CALL database name'. 'stored procedure name(参数值);示例:- 呼叫dbs_nexopay_sisd1_dec_23spr_v2_invoice_details_for_invoice_receipt_sub_swiss(1, 1, 1, 1);

  2. 在您的 MySQL 工作台上,您也可以这样做。一世。右键单击存储过程。ii. 发送到 SQL 编辑器 iii. 过程调用。

于 2022-02-08T05:52:13.607 回答
-3

If you simply need to excute your stored procedure proc_name 'paramValue1' , 'paramValue2'... at the same time you are executing more than one query like one select query and stored procedure you have to add select * from tableName EXEC proc_name paramValue1 , paramValue2...

于 2015-04-08T08:09:34.900 回答
-8

存储过程可以使用以下语法在 sql developer tool 中运行

开始程序名();结尾;

如果有任何参数,则必须传递它。

于 2013-07-09T14:01:34.477 回答
-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.
于 2013-12-17T11:06:53.323 回答