Как выполнить хранимую процедуру 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? Если да, какой синтаксис мне нужно использовать?

Ответы:


231

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

proc_name paramValue1, paramValue2

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


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'


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

Если целью хранимой процедуры является выполнение INSERTтаблицы, в которой объявлено поле Identity, то поле в этом сценарии @paramValue1должно быть объявлено и просто передать значение 0, поскольку оно будет автоматически увеличено.


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 инструмент разработчика, используя следующий синтаксис

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

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


Почему вы заключаете один оператор в блок операторов? Вы должны сделать это только для серии операторов 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.

1
Добро пожаловать в stackoverflow. Пройдите этот тур, чтобы узнать, как работает этот сайт и для чего он нужен. Какой твой ответ?
— Деврадж Гадхави
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.