#sql-server #stored-procedures
#sql-server #хранимые процедуры
Вопрос:
Итак, я новичок в MS SQL (использую oracle последние 5-7 лет), и это должно быть очень просто, поэтому я считаю, что мне не хватает чего-то очень простого. (Я попытался следовать приведенным здесь примерам: http://technet.microsoft.com/en-us/library/ms190669 (v=SQL.105).aspx)
Итак, я создаю следующую хранимую процедуру для запроса таблицы (это очень простая и бессмысленная процедура, но я не могу продолжить свою более сложную процедуру, пока не решу эту проблему)
create procedure sp_getTransactions
as
select * from MyTransactions;
Затем я пытаюсь выполнить эту процедуру
execute dbo.sp_getTransactions
(Я пробовал без dbo. и получаю ту же ошибку)
Это дает мне очень полезную ошибку Неправильный синтаксис рядом с ключевым словом ‘BEGIN’.
Теперь, может быть, я сумасшедший, но я нигде не вижу оператора begin в моей процедуре (я пытался добавить его безрезультатно).
Может кто-нибудь дать мне несколько советов здесь? Спасибо
Комментарии:
1. Это не решит вашу проблему, но вы должны отметить —
CREATE PROCEDURE
: «Избегайте использования префикса sp_ при именовании процедур. Этот префикс используется SQL Server для обозначения системных процедур. Использование префикса может привести к прерыванию работы кода приложения, если существует системная процедура с тем же именем «.2. Вы создаете и выполняете одновременно? Если это так, вам нужно добавить
GO
(конец пакетной команды) после создания (или перед выполнением) хранимой процедуры.3. Как вы выполняете
execute
команду? Возможно, это из другой хранимой процедуры или, может быть, из пакета с несколькими операторами?
Ответ №1:
На самом деле, проблема, как выясняется, заключается в клиенте, который я использовал. Я выполнял сценарии sql с использованием Oracle SQLDeveloper с драйвером MSSQL jTDS. Кажется, что этот драйвер по большей части работает нормально, но когда дело доходит до запуска хранимых процедур, возникает ошибка. Я предполагаю, что оператор execute не обрабатывается плагином должным образом при установке на сервер
Ответ №2:
Проверьте следующим образом:
CREATE PROCEDURE sp_getTransactions
AS
BEGIN
SELECT * FROM MyTransactions;
END
В execute dbo.sp__getTransactions
инструкции вы использовали 2 _
, но в инструкции CREATE PROCEDURE он имеет только один. Измените на dbo.sp_getTransactions
и попробуйте выполнить.
Комментарии:
1. Нет. Та же проблема, что и 2 _ в инструкции execute, была опечаткой выше.
2. Все та же проблема
3. Я думаю, что вы написали все инструкции и выполнили их целиком… Просто прокомментируйте команду execute и запустите процедуру
4. Нет. Сначала я создал хранимую процедуру. Подтвердил, что он был добавлен в область процедур схемы, затем попытался запустить инструкцию execute.
5. Просто УДАЛИТЕ процедуру и создайте ее снова… Проверьте после этого, работает ли он или нет…