"не удалось найти хранимую процедуру" - PullRequest
14 голосов
/ 11 мая 2009

Я поддерживаю классический веб-сайт ASP, имеющий серверную часть SQL Server 2005. Для небольшой части новой функциональности я написал хранимую процедуру для вставки. Это единственная пользовательская хранимая процедура в базе данных.

Когда я пытаюсь вызвать хранимую процедуру из кода, я получаю следующую ошибку:

Microsoft OLE DB Provider for SQL Server error '80040e14' 
Could not find stored procedure 'InsertGroup'. 
/newGroup.asp, line 84 

БД использует аутентификацию SQL Server. Когда я подключаюсь к серверу БД в Visual Studio, используя того же пользователя / pw, что и в строке подключения, хранимая процедура не отображается, но все таблицы.

У пользователя есть роли для чтения данных и записи данных и явное разрешение на выполнение хранимой процедуры.

Чего мне не хватает?

ОБНОВЛЕНИЕ: Мои извинения, администратор сервера дезинформировал меня, что это был сервер 2000, когда он фактически был сервером 2005 (работает на Windows Server 2003 x64).

Ответы [ 9 ]

53 голосов
/ 11 мая 2009

Аллея стыда:

Строка подключения указывала на действующую базу данных. Сообщение об ошибке было абсолютно точным - хранимая процедура присутствовала только в базе данных разработчика. Спасибо всем, кто дал отличные ответы, и мои извинения за потраченное время.

8 голосов
/ 11 мая 2009

Вам может потребоваться проверить, кто является фактическим владельцем хранимой процедуры. Если это конкретный другой пользователь, возможно, поэтому вы не можете получить к нему доступ.

3 голосов
/ 18 апреля 2013

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

set @runProc = 'dbo.StoredProcedure'
 exec @runProc

Это будет работать, однако:

set @runProc = 'dbo.StoredProcedure ''foods'''
exec @runProc

Это выдаст ошибку «не удалось найти хранимую процедуру dbo.StoredProcedure« food »», однако это можно легко преодолеть с помощью parantheses , например так:

set @runProc = 'exec dbo.StoredProcedure ''foods'''
exec (@runProc)
2 голосов
/ 30 сентября 2011

Есть 2 причины:

1 - название хранимой процедуры Когда вы объявляете процедуру хранения в коде, убедитесь, что вы не выполняете или не выполняете ключевое слово например:

C #

string sqlstr="sp_getAllcustomers";// right way to declare it.

string sqlstr="execute sp_getAllCustomers";//wrong way and you will get that error message.

Из этого кода:

MSDBHelp.ExecuteNonQuery(sqlconexec, CommandType.StoredProcedure, sqlexec);

CommandType.StoreProcedure будет искать только имя хранимой процедуры, а ExecuteNonQuery будет выполнять процедуру сохранения за сценой.

2- строка подключения:

Другая причина - неправильная строка подключения. Загляните внутрь строки подключения и убедитесь, что у вас есть подключение, особенно имя базы данных и т. Д.

2 голосов
/ 11 мая 2009

убедитесь, что имя вашей схемы находится в строке подключения?

1 голос
/ 04 июня 2018

у меня было:

ИСПОЛЬЗОВАТЬ [ Неправильное место ]

GO

до

DECLARE ..

0 голосов
/ 13 мая 2019

У меня была такая же проблема. В конце концов я нашел почему. Я использовал код из Интернета, чтобы проверить вывод моей процедуры. В конце он получил звонок на Drop(procedure), поэтому я удалил его сам.

0 голосов
/ 14 июня 2017

Еще одна возможность проверить. Перечислим здесь, потому что это случилось со мной и не было упомянуто; -)

Я случайно добавил пробел в конце имени. Много часов пробовал, прежде чем я наконец заметил это. Это всегда что-то простое после того, как вы это выясните.

0 голосов
/ 16 марта 2017

Не удалось найти хранимую процедуру? ---- означает, когда вы получите это .. наш код, как это

String sp="{call GetUnitReferenceMap}";

stmt=conn.prepareCall(sp);

ResultSet rs = stmt.executeQuery();

while (rs.next()) {

currencyMap.put(rs.getString(1).trim(), rs.getString(2).trim()); 

У меня есть 4 базы данных (sample1, sample2, sample3), но stmt будет искать местоположение master База данных по умолчанию, тогда мы получим исключение.

мы должны предоставить имя БД, тогда проблема решится ::

String sp="{call sample1..GetUnitReferenceMap}";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...