2009-08-13 9 views
1

J'ai récemment effectué une importation de base de données à partir d'une base de données SQL Server 2000 vers une base de données SQL Server 2005. J'ai traversé et mis en place ce que je pensais être les mêmes informations de connexion et autorisations de propriétaire que j'avais précédemment installé dans mon ancienne base de données.Impossible de trouver l'erreur de procédure stockée

Toute la base de code que je travaille a des procédures stockées listées simplement par le nom de la procédure stockée. Pour m'assurer que les connexions appropriées sont créées, je me connecte au SQL Server Management Studio avec les informations de connexion utilisées par mon application (c'est-à-dire en utilisant le nom d'utilisateur "licensemgr" et son mot de passe associé). Je peux voir toutes les tables, les procédures stockées, etc ... dans ma base de données quand je me connecte avec une combinaison. Lorsque je tente d'exécuter une procédure stockée, SQL Server Management Studio utilise la syntaxe suivante pour exécuter:

EXEC: @return_value = [licensemgr].[Stored_Procedure_Name] 

et il exécute sans erreur.

Si j'essaie de supprimer le [licensemgr]. d'avant le [Stored_Procedure_Name], cependant j'obtiens l'erreur "Impossible de trouver la procédure stockée: Stored_Procedure_Name". C'est la même erreur que je reçois lors de l'exécution de mon application à partir de cette base de données. J'ai changé un appel de procédure stockée dans mon application pour avoir "licensemgr." En face du nom de la procédure stockée et qui semblait corriger le problème, cependant, je ne veux pas le faire pour chaque appel de procédure stockée dans mon application. Je me demande donc quel type de problème de configuration/permissions je pourrais manquer dans mon instance SQL Server de sorte que même lorsque je suis connecté à la base de données en tant que licensemgr, je ne vois pas la procédure stockée dans le schéma "licensemgr".

Répondre

1

Dans SQL Server 2000, [licensemgr] faisait référence au propriétaire de la table. Ainsi, lorsque vous êtes connecté en tant que [licensemgr], vous n'avez pas besoin du préfixe.

Dans SQL Server 2005, cela a été modifié en schéma, il doit donc être spécifié. Voir:

http://msdn.microsoft.com/en-us/library/ms190387.aspx

EDIT

Il y a deux choses que vous devez faire attention à:

  • Si l'utilisateur est dans le rôle sysadmin, il sera toujours défaut à la dbo schéma, donc vous devez préfixe
  • Si votre utilisateur doit exécuter du code qui est dans des schémas différents, vous devrez préfixer

Si aucun des deux ci-dessus ne fonctionne en définissant le schéma par défaut pour l'utilisateur

+0

Donc, juste pour clarifier, vous dites (et l'article dit si je le lis correctement) que dans SQL Server 2005, vous devez spécifier le nom du schéma pour chaque procédure stockée en raison de la séparation de la propriété des noms de schéma? Cela ne me dérange pas de modifier tout mon code si c'est la façon dont les choses doivent être, je veux juste m'assurer de bien vous comprendre. – Kivus

1

Lorsque vous avez créé votre utilisateur, avez-vous spécifié DEFAULT_SCHEMA?

CREATE USER ... WITH DEFAULT_SCHEMA = "licensemgr" 

Sinon, vous devrez peut-être utiliser ALTER USER pour résoudre ce problème pour l'utilisateur dans le nouveau système.

+0

J'ai utilisé SQL Server Management Studio pour créer l'utilisateur et j'ai défini le schéma par défaut sur licensemgr. Donc je pense que je suis bon ici. – Kivus

Questions connexes