Як виконати процедуру збереження SQL Server у розробнику SQL?


148

Мені надано обліковий запис користувача в базі даних SQL Server, яка має лише права на виконання збереженої процедури. Я додав jar jar-файл 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

(і вам потрібні коми, як згадував Misnomer)


8
Чи є винятки з цього правила? Здається, я отримую помилку "Неправильний синтаксис біля" sp_dev_mystoredproc "." при виконанні цього синтаксису.
— нуццоло

2
У моєму випадку потрібне попереднє ім'я EXEC
— César León

3
Я настійно рекомендую відвідати посилання, запропоноване @MuriloKunze. Дуже важливо знати.
— RBT

@RBT хто посилання куди?
— CervEd

72

Ви пропали безвісти ,

EXEC proc_name 'paramValue1','paramValue2'

1
Я додав пропущену кому, але знову ж таки отримаю ту саму помилку.
— sdoca

Які ваші параметри, якщо вони варчар, то вам потрібні лише цитати ... крім того, що нічого не можна придумати ... ви можете спробувати це просто запустити лише це в новому вікні - EXEC proc_nameі подивіться, чи запитує він вас про другий параметр ... то, принаймні, ви знаєте, що ваш синтаксис є правильним.
— Вишал

Я видалив другий параметр і досі така ж помилка. Я не думаю, що це взагалі запущена процедура. Команда EXEC не підкреслена синтаксисом, тому я здогадуюсь, що розробник не розпізнає її, хоча з'єднання з базою даних SQL Server. Але я не можу знайти нічого в Інтернеті, щоб підтвердити / спростувати це.
— sdoca

Так, спробуйте вибрати деякі записи та виконати декілька простих команд, подивіться, чи взагалі щось працює! .. Найкраща удача ..
— Вішал

На жаль, мій користувач має лише привілеї для запуску збереженої процедури.
— sdoca

18

Вам потрібно зробити це:

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

BEGIN ім'я процедури (); КІНЧ;

Якщо є якісь параметри, то їх потрібно передавати.


Чому ви додаєте один вислів до блоку операторів? Це потрібно робити лише для серії тверджень 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. Відвідайте цю екскурсію, щоб дізнатися, як працює цей сайт і для чого він призначений. Яка ваша відповідь?
— Devraj Gadhavi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.