Как выполнить хранимую процедуру 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.