2009-05-19 7 views
4

Cela me rend dingue et je suis sûr que la réponse est si facile.En cours d'exécution Sql Server stocké proc dans le contexte de l'appelant

J'ai plusieurs schémas qui ont chacun une vue nommée "Tâche". Je souhaite créer un seul proc stocké que les utilisateurs qui s'exécutent dans plusieurs schémas par défaut peuvent s'exécuter avec succès - ce proc stocké effectue une sélection dans la vue des tâches.

dire J'ai ces objets:

Vue: fr.Task (utilisateurs avec le schéma par défaut de « fr » obtenir ce s'ils tapent juste « select * from tâche » Vue: de.Task (idem, mais pour les utilisateurs avec le schéma par défaut « de »)

StoredProc:. dbo.MyProc - tous les utilisateurs ont des autorisations d'exécution Le proc est simplement:

select count(*) from Task 

maintenant, je me attends (et je veux) que si un utilisateur avec le schéma par défaut 'fr' l'a fait

exec dbo.MyProc 

Ensuite, ils obtiendraient le nombre de lignes à partir de la vue. Mais à la place, ils reçoivent une erreur "Nom d'objet invalide 'Tâche'."

N'est-il pas possible de créer un processus stocké générique qui exécutera un select dans le schéma de l'utilisateur en cours d'exécution?

Thx, Bill

Répondre

3

Pour exécuter une procédure stockée dans le contexte de l'appelant, vous pouvez utiliser l'Execute Comme clause cependant, je pense que ce n'est pas vraiment ce que vous voulez faire.

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

+0

Lire les détails de Exécuter Comme, il semble que c'est exactement ce que je veux. Fait intéressant, cependant, cela n'a pas fonctionné. J'ai recréé le proc stocké avec le "WITH EXECUTE AS CALLER", mais toujours la même erreur. Bummer. – BillVienna

+0

Exécutez, SELECT CURRENT_USER, dans votre procédure stockée pour valider l'identité de l'appelant. –

+0

Bonne idée. Il renvoie l'appelant correct (non-dbo), celui que j'espérais. Par conséquent le problème n'est pas qu'il ne s'exécute pas dans le contexte que je veux, mais plutôt il ne résout pas le nom de vue "Tâche" sans un préfixe de schéma. C'est un peu dommage, car le but était d'avoir un seul proc stocké que plusieurs utilisateurs (avec plusieurs schémas par défaut) pouvaient appeler, et le proc stocké référencera automagiquement les objets dans le schéma par défaut de l'appelant. Mais il semble que ça ne marche pas comme ça. – BillVienna

0

SQL dynamique Utilisez-à-dire., Exec ('select count (*) de la tâche)

Questions connexes