2010-11-09 171 views
116

我已将用户帐户授予仅具有执行存储过程权限的SQL Server数据库。我将JTDS SQL Server JDBC jar文件添加到SQL Developer,并将其添加为第三方JDBC驱动程序。我可以成功登录到SQL Server数据库。我得到这个语法运行的程序:如何在SQL Developer中执行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调用过程?如果是这样,我需要使用什么语法?

回答

187

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

proc_name paramValue1, paramValue2 

(你需要逗号作为名不副实提到的)使用下面的语法

+7

这个规则是否有例外?我似乎遇到错误“附近的语法错误”sp_dev_mystoredproc“。”当用这个语法执行时。 – Nuzzolilo 2015-10-24 02:30:37

+0

在我的情况下需要EXEC优先proc_name – 2017-01-20 14:37:59

+2

@Nuzzolilo https://stackoverflow.com/a/37334739/1304456 – MuriloKunze 2017-07-13 19:39:48

57

你缺少,

EXEC proc_name 'paramValue1','paramValue2' 
+1

我添加了缺少的逗号,但仍然得到相同的错误。 – sdoca 2010-11-09 18:05:12

+0

什么是你的参数,如果他们是varchar那么只有你需要引号......除此之外,不能想到任何东西......你可以尝试这只是在一个新的窗口中运行 - “EXEC proc_name”,看看是否它要求你的第二个参数...然后至少你知道你的sytax是正确的..如果不工作意味着你probanly没有正确存储过程名称...尝试全限定名.. – Vishal 2010-11-09 18:14:13

+0

我删除了第二个参数,仍然同样的错误。我不认为它运行的程序。 EXEC命令没有语法突出显示,所以我猜测即使连接到SQL Server数据库,开发人员也不会识别它。但我无法在网上找到任何证据来证实/否认这一点。 – sdoca 2010-11-09 18:18:14

-6

的存储过程可以在SQL Developer中的工具来运行BEGIN 过程名(); END;

如果有任何参数,那么它必须通过。

+0

你为什么用一个语句块包含单个语句?您必须仅为[一系列T-SQL语句](https://msdn.microsoft.com/en-us/library/ms190487.aspx)执行此操作。 – 2015-11-10 15:36:04

15

你需要这样做:

exec procName 
    @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value', 
    @parameter_z_name = 'parameter_z_value' 
-9
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。参考[this](http://stackoverflow.com/tour)了解本网站的工作原理和用途。你的答案是什么? – 2013-12-17 11:26:17

+2

大声笑 - 不知道编辑前这个答案是什么样子。 – 2014-07-16 22:56:28

+0

@TobyHolland点击'编辑链接' – 2015-02-23 11:02:44

6
EXECUTE [or EXEC] procedure_name 
    @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value', 
    @parameter_z_name = 'parameter_z_value' 
-2

,如果你只需要在同一时间你是EXCUTE到EXCUTE存储过程 proc_name 'paramValue1' , 'paramValue2'... 更多然后像一个选择查询一个查询和存储过程您必须添加 select * from tableName EXCE proc_name paramValue1 , paramValue2...

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

如果Stored Procedure的目标是在声明了Identity字段的表上执行INSERT,则应该声明此场景@paramValue1中的字段,并仅传递值0,因为它将自动递增。

相关问题