Як виконати процедуру збереження 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.