1

Ich habe eine gespeicherte Prozedur, die einen Parameter akzeptiert und true oder false zurückgibt.Wählen Sie Zeilen aus, die eine in einer gespeicherten Prozedur berechnete Bedingung erfüllen.

Ich muss aus einer Tabelle jene Zeilen auswählen, die gespeicherte Prozedur für sie zurückgibt.

Angenommen, meine Tabelle mit den Spalten: IdEmployee, Name, Address und Phone

Die gespeicherte Prozedur ein IdEmployee nimmt und true oder false, wenn die Arbeitnehmer einen Dienst oder nicht bzw. in Auftrag gegeben hat.

Schließlich, sobald ich die Reihe der gefilterten Zeilen, die einen Dienst vertraglich haben, muss ich sie wieder filtern, um diejenigen Zeilen zu erhalten, die einige andere Bedingungen erfüllen, um schließlich das Endergebnis zu erhalten.

Am besten wäre es, das Endergebnis mit einer einzigen Auswahl zu erhalten und die gespeicherte Prozedur für jede Zeile in where-Klausel auszuführen, um diejenigen auszuwählen, für die die gespeicherte Prozedur true zurückgibt. Leider ist es nicht möglich, ich kann eine Speicherprozedur nicht innerhalb einer select (where-Klausel) ausführen.

Ich kann die gespeicherte Prozedur nicht zu einer Funktion ändern, und ich möchte keinen Cursor verwenden.

Ich dachte in erstellen Sie eine Skalarfunktion, die die gespeicherte Prozedur aufruft und dann die Skalarfunktion innerhalb der Auswahl verwenden.

Wie kann ich das tun? Irgendwelche Ideen?

+1

Sie haben keine andere Wahl als eine Schleife zu verwenden, wahrscheinlich mit einem Cursor. –

+1

Können Sie den Prozedurcode und Ihre Abfrage zu Ihrer Frage hinzufügen? Dies ist wahrscheinlich mit einem anderen Ansatz möglich, aber Sie haben uns nicht genügend Informationen zur Verfügung gestellt, um zu untersuchen, was sie sein könnten. – iamdave

+1

Können Sie die aktuelle Funktion neu schreiben, um alle IDs für den vertraglich vereinbarten Service auszugeben. Sie könnten sie dann in einer Tabelle speichern und einfach einen Join verwenden. – BinaryPatrick

Antwort

0

Ich habe nicht INSERT-EXEC selbst versucht, aber es kann sein, was Sie brauchen. Wenn Sie eine temporäre Tabelle oder Tabellenvariable erstellen und mit INSERT-EXEC auffüllen, können Sie diese Tabelle zum Filtern verwenden.

--INSERT...EXECUTE procedure example 
INSERT INTO dbo.EmployeeSales 
EXECUTE dbo.uspGetEmployeeSales; 
GO 
Verwandte Themen