Не удалось найти хранимую процедуру, однако может выполнить ее - PullRequest
10 голосов
/ 23 февраля 2012

Я новичок в SQL Server и создал мою самую первую хранимую процедуру. Он отлично работает, и я могу найти его в «Программируемость», «Хранимые процедуры», поэтому я открываю новый запрос и набираю следующие операторы:

use name_of_database
exec name_of_stored_procedure 'value'

Однако перед выполнением хранимой процедуры имя хранимой процедуры подчеркнуто красным, что не может быть найдено, поэтому я запускаю запрос:

select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_NAME = 'name_of_stored_procedure'

Nada. Ничего не возвращает.

Однако, если я продолжу выполнять хранимую процедуру, она будет работать нормально.

Что я делаю не так?

Ответы [ 5 ]

24 голосов
/ 23 февраля 2012

Для SSMS вам просто нужно очистить кеш Intellisense (Ctrl + Shift + R).Тогда красная волнистая линия исчезнет, ​​и Intellisense поможет вам с этим.

Если вы можете просмотреть свой сохраненный процесс в разделе Программируемость -> Сохраненные процедуры в проводнике объектов, то вы сможете просмотреть его черезselect * from information_schema.routines ... запрос.Проверьте контекст вашей базы данных, а также остальную часть запроса.Выньте предложение where и просмотрите весь набор результатов.

2 голосов
/ 22 апреля 2015

У меня была та же проблема, и я исправил ее, просто используя квадратные скобки

EXEC [dbo].[procedureName]

Надеюсь, это кому-нибудь поможет позже:)

2 голосов
/ 23 февраля 2012

Возможно ли, что ваша процедура находится в схеме, отличной от dbo? Вы должны всегда указывать схему при создании и ссылках на объекты. Есть несколько причин , как описано здесь . По сути, если вы не укажете схему, вы можете столкнуться с различными путаницами в зависимости от схемы по умолчанию пользователя, который создает или вызывает процедуру.

При проверке наличия объектов также следует учитывать схему.

Также вам следует проверить процедуры в sys.procedures. Некоторая справочная информация о постоянно кодируется здесь , так как вы не всегда можете получить информацию, которую вы ищете от INFORMATION_SCHEMA.

1 голос
/ 20 июня 2016

В моем случае я решил проблему следующим образом: ПРОСТО:

  1. Всякий раз, когда я создавал процедуру, я просто выполняю процедуру в MSSQL Server Studio один раз.Итак, я получил созданную процедуру со схемой в db_name=>Programmibility=>Stored Procedure.
  2. Наконец я вызвал ее из своего кода C #.И получил решение !!!
0 голосов
/ 23 февраля 2012

Я предполагаю, что вы можете просто запустить 2-й запрос к другой базе данных, возможно, к главной, попробуйте:

use 'name_of_database'
select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_NAME = 'name_of_stored_procedure'

и тогда вы сможете увидеть его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...