2009-05-19 11 views
4

Das macht mich verrückt und ich bin sicher, die Antwort ist so einfach.Running Sql Server gespeichert proc im Kontext des Aufrufers

Ich habe mehrere Schemas, die jeweils eine Sicht namens "Task" haben. Ich möchte einen einzelnen gespeicherten Prozess machen, dass Benutzer, die in mehreren Standardschemas ausgeführt werden, erfolgreich ausgeführt werden können - dieser gespeicherte Prozess führt eine Auswahl in der Aufgabenansicht aus.

Also sage ich diese Objekte haben:

Ausblick: fr.Task (Benutzer mit Standardschema von ‚fr‘ erhalten diese, wenn sie nur „select * from Aufgabe“ Typ Ausblick: de.Task (dito, aber für Benutzer mit Standardschema ‚de‘)

StoredProc. dbo.MyProc - alle Benutzer-Berechtigungen ausführen haben die proc ist einfach:

select count(*) from Task 

Jetzt würde ich erwarten (und ich will), dass wenn ein Benutzer mit dem Standardschema 'fr'

tat
exec dbo.MyProc 

Dann würden sie die Anzahl der Zeilen aus Sicht fr.Task erhalten. Stattdessen erhalten sie den Fehler "Ungültiger Objektname 'Aufgabe'."

Ist es nicht möglich, ein generisches Storeproc zu erstellen, das eine Auswahl im Schema des aktiven Benutzers ausführt?

Thx, Bill

Antwort

3

Um eine gespeicherte Prozedur im Rahmen des ANRUFER führen Sie die As-Klausel ausführen jedoch verwenden können, vermute ich, dass dies nicht wirklich das, was Sie tun wollen, sind.

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

+0

die Details ausführen Wie Lesen, scheint es, wie es ist genau das, was ich will. Interessanterweise hat es jedoch nicht funktioniert. Ich habe den gespeicherten Proc mit dem "WITH EXECUTE AS CALLER" neu erstellt, bekomme aber immer noch den gleichen Fehler. Bummel. – BillVienna

+0

Führen Sie SELECT CURRENT_USER in Ihrer gespeicherten Prozedur aus, um zu überprüfen, wer der Anrufer ist. –

+0

Gute Idee. Es gibt den richtigen (nicht-dbo) Anrufer zurück, den ich erhofft hatte. Daher besteht das Problem nicht darin, dass es nicht in dem von mir gewünschten Kontext ausgeführt wird, sondern es löst den Ansichtsnamen "Task" ohne ein Schema-Präfix nicht auf. Das ist ein Mist, denn der springende Punkt war, nur einen gespeicherten proc zu haben, den mehrere Benutzer (mit mehreren Standardschemas) aufrufen könnten, und der gespeicherte proc würde automatisch Objekte im Standardschema des Aufrufers referenzieren. Aber es sieht so aus, als ob es nicht funktioniert. – BillVienna

0

Verwenden der dynamischen SQL dh., Exec ('select count (*) aus der Aufgabe')