Как выполнить хранимую процедуру SQL Server в SQL Developer?

148

Я получил учетную запись пользователя для базы данных SQL Server, которая имеет только привилегии для выполнения хранимой процедуры. Я добавил JAR-файл JTDS JTDS для SQL Server в 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? Если да, какой синтаксис мне нужно использовать?

sdoca
источник

Ответы:

231

Вам не нужно предложение EXEC. Просто используйте

proc_name paramValue1, paramValue2

(и вам нужны запятые, как упоминал Мисномер)

Tema
источник
8
Есть ли исключения из этого правила? Кажется, я получаю сообщение об ошибке «Неверный синтаксис рядом с sp_dev_mystoredproc». при выполнении с этим синтаксисом.
nuzzolilo
2
EXEC предшествующее имя_процесса требуется в моем случае
Сезар Леон
3
Я настоятельно рекомендую посетить ссылку, предложенную @MuriloKunze. Очень важно знать.
RBT
@RBT кто ​​там ссылка?
CervEd
72

Вам не хватает ,

EXEC proc_name 'paramValue1','paramValue2'
Вишал
источник
1
Я добавил пропущенную запятую, но снова все равно получаю ту же ошибку.
sdoca
Каковы ваши параметры, если они varchar, тогда только вам нужны кавычки ... кроме этого ничего не могу придумать ... вы можете попробовать это, просто запустите только это в новых окнах - EXEC proc_nameи посмотреть, если он просит вас второй параметр ... тогда, по крайней мере, вы знаете, что ваш синтаксис правильный .. если он не работает, значит, у вас, вероятно, нет правильного сохраненного имени процесса ... попробуйте полное квалифицированное имя ..
Вишал
Я удалил второй параметр и все ту же ошибку. Я не думаю, что это работает процедура вообще. Команда EXEC не выделена синтаксисом, поэтому я предполагаю, что Разработчик не распознает ее, даже если соединение с базой данных SQL Server. Но я не могу найти что-либо в Интернете, чтобы подтвердить / опровергнуть это.
sdoca
Да .. попробуйте выбрать несколько записей и выполнить несколько простых команд, посмотрите, сработает ли вообще что-нибудь! .. Удачи ..
Вишал
К сожалению, мой пользователь имеет права только для запуска хранимой процедуры.
sdoca
19

Вам нужно сделать это:

    exec procName 
    @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value',
    @parameter_z_name = 'parameter_z_value'
Даниил
источник
4
    EXECUTE [or EXEC] procedure_name
  @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, поскольку оно будет автоматически увеличено.

chri3g91
источник
0

Я знаю, что это старый. Но это может помочь другим.

Я добавил функцию вызова SP между BEGIN / END. Вот рабочий скрипт.

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...

Джоэл Прабху
источник
-8

Хранимые процедуры могут быть запущены в SQL инструмент разработчика, используя следующий синтаксис

НАЧАЛО имя процедуры (); КОНЕЦ;

Если есть какие-либо параметры, то это должно быть передано.

Santhosh
источник
Почему вы заключаете один оператор в блок операторов? Вы должны сделать это только для серии операторов T-SQL .
Давид Ференци Рогожан
-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
источник
1
Добро пожаловать в stackoverflow. Пройдите этот тур, чтобы узнать, как работает этот сайт и для чего он нужен. Какой твой ответ?
Деврадж Гадхави