ChatGPT解决这个技术问题 Extra ChatGPT

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

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


T
Tema

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

proc_name paramValue1, paramValue2

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


这条规则有任何例外吗?我似乎收到错误“'sp_dev_mystoredproc' 附近的语法不正确”。使用此语法执行时。
在我的情况下,EXEC 之前的 proc_name 是必需的
@nuzzolilo 不要在逗号中使用 sp 名称。
V
Vishal

你错过了,

EXEC proc_name 'paramValue1','paramValue2'

我添加了缺少的逗号,但再次出现同样的错误。
如果它们是 varchar,你的参数是什么,那么只有你需要引号......除此之外什么都想不到......你可以试试这个,只在新窗口中运行 - EXEC proc_name 看看它是否询问你的第二个参数......那么至少你知道你的语法是正确的......如果不起作用意味着你可能没有正确的存储过程名称......尝试完整的限定名......
我删除了第二个参数,仍然是同样的错误。我认为它根本不是运行程序。 EXEC 命令没有突出显示语法,所以我猜即使连接到 SQL Server 数据库,开发人员也无法识别它。但我在网上找不到任何东西来确认/否认这一点。
是的..尝试选择一些记录并执行一些简单的命令,看看是否有任何工作!..祝你好运..
不幸的是,我的用户只有运行存储过程的权限。
J
Jaroslav Bezděk

你需要这样做:

exec procName 
@parameter_1_Name = 'parameter_1_Value', 
@parameter_2_name = 'parameter_2_value',
@parameter_z_name = 'parameter_z_value'

J
Jaroslav Bezděk
EXECUTE [or EXEC] procedure_name
@parameter_1_Name = 'parameter_1_Value', 
@parameter_2_name = 'parameter_2_value',
@parameter_z_name = 'parameter_z_value'

R
Roshan Perera

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

我在 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 

P
Pramodi Samaratunga

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

EXEC proc_name 'paramValue1','paramValue2'

D
Divyang Desai
EXEC proc_name @paramValue1 = 0, @paramValue2 = 'some text';
GO

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


m
madhav

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

调用数据库名称'。 '存储过程名称(参数值);例如:- CALL dbs_nexopay_sisd1_dec_23.spr_v2_invoice_details_for_invoice_receipt_sub_swiss(1, 1, 1, 1);在您的 MySQL 工作台上,您也可以这样做。一世。右键单击存储过程。 ii.发送到 SQL 编辑器 iii.过程调用。


您的答案可以通过额外的支持信息得到改进。请edit添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。您可以找到有关如何写出好答案的更多信息in the help center
b
bruno

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


S
Santhosh

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

开始程序名();结尾;

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


为什么要在语句块中包含单个语句?您只需为 series of T-SQL statements 执行此操作。
O
Ondrej Janacek
Select * from Table name ..i.e(are you save table name in sql(TEST) k.

Select * from TEST then you will execute your project.

欢迎来到stackoverflow。参加 this 之旅,了解该网站的运作方式及其用途。你的答案是什么?