web-dev-qa-db-fra.com

"impossible de trouver la procédure stockée"

Je gère un site Web classique ASP doté d'un serveur SQL Server 2005. Pour un petit morceau de nouvelle fonctionnalité, j'ai écrit une procédure stockée pour faire une insertion. Il s'agit de la seule procédure stockée utilisateur dans la base de données.

Lorsque j'essaie d'appeler la procédure stockée à partir du code, l'erreur suivante apparaît:

 Microsoft OLE Fournisseur DB pour l'erreur SQL Server '80040e14' 
 Impossible de trouver la procédure stockée 'InsertGroup'. 
/newGroup.asp, ligne 84 

La base de données utilise l'authentification SQL Server. Lorsque je me connecte au serveur de base de données dans Visual Studio en utilisant le même utilisateur/pw que dans la chaîne de connexion, la procédure stockée n'est pas visible, mais toutes les tables le sont.

L'utilisateur a des rôles datareader et datawriter et une autorisation d'exécution explicite sur la procédure stockée.

Qu'est-ce que je rate?

UPDATE: Mes excuses, l’administrateur du serveur m’a mal informé qu’il s’agissait d’un serveur 2000 alors qu’il s’agissait d’un serveur 2005 (fonctionnant sous Windows Server 2003 x64).

12
Chloraphil

Marche de la honte:

La chaîne de connexion pointait vers la base de données en direct. Le message d'erreur était tout à fait exact: la procédure stockée était uniquement présente dans la base de données dev. Merci à tous ceux qui ont fourni d'excellentes réponses, et mes excuses pour perdre votre temps.

46
Chloraphil

Vous devrez peut-être vérifier qui est le propriétaire réel de la procédure stockée. S'il s'agit d'un utilisateur différent, c'est peut-être pour cette raison que vous ne pouvez pas y accéder.

8
Robin Day

Parfois, cela peut également se produire lorsqu'une procédure stockée est appelée avec des paramètres. Par exemple, si vous tapez quelque chose comme:

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

Cela fonctionnera, cependant:

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

L'erreur "ne peut pas trouver la procédure stockée dbo.StoredProcedure 'foods'", cependant, ceci peut facilement être surmonté avec parantheses comme ceci:

set @runProc = 'exec dbo.StoredProcedure ''foods'''
exec (@runProc)
3
prozilla

assurez-vous que votre nom de schéma est dans la chaîne de connexion?

2
DForck42

Il y a 2 causes:

1- Nom de la procédure de stockage Lorsque vous déclarez la procédure de magasin dans le code, assurez-vous de ne pas exécuter ni d'exécuter de mot clé, par exemple:

C #

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

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

A partir de ce code:

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

CommandType.StoreProcedure recherchera uniquement le nom de la procédure de stockage et ExecuteNonQuery exécutera la procédure de stockage derrière la scène.

2- chaîne de connexion:

Une autre cause est la mauvaise chaîne de connexion. Regardez à l'intérieur de la chaîne de connexion et assurez-vous d'avoir la connexion, en particulier le nom de la base de données, etc.

1
Talley

J'ai eu:

USE [ wrong_place ]

ALLER

avant

DÉCLARER..

1
AJ AJ

Une autre possibilité de vérifier. Enumérer ici parce que ça m'est juste arrivé et qu'on ne l'a pas mentionné;

J'avais accidentellement ajouté un espace à la fin du nom. Plusieurs heures à essayer des choses avant que je ne le remarque enfin. C'est toujours quelque chose de simple après avoir compris.

0
Ken.Shipman

Impossible de trouver une procédure stockée? ---- signifie quand vous obtenez ceci .. notre code comme celui-ci

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()); 

J'ai 4 bases de données (sample1, sample2, sample3) mais stmt sera l'emplacement de la recherche est master base de données par défaut, puis nous obtiendrons une exception.

nous devrions fournir le nom de la base de données alors le problème est résolu:

String sp="{call sample1..GetUnitReferenceMap}";
0
Rama Krishna