458 Stimmen

Wie man SELECT FROM gespeicherte Prozedur

Ich habe eine gespeicherte Prozedur, die Zeilen zurückgibt:

CREATE PROCEDURE MyProc
AS
BEGIN
    SELECT * FROM MyTable
END

Mein eigentliches Verfahren ist etwas komplizierter, weshalb eine gespeicherte Prozedur erforderlich ist.

Ist es möglich, die Ausgabe durch Aufruf dieser Prozedur auszuwählen?

Etwa so:

SELECT * FROM (EXEC MyProc) AS TEMP

Ich benötige SELECT TOP X , ROW_NUMBER und eine zusätzliche WHERE Klausel, um meine Daten auszulagern, und ich möchte diese Werte nicht wirklich als Parameter übergeben.

303voto

Charles Bretana Punkte 137391

Puede

  1. eine Tabellenvariable erstellen, die die Ergebnismenge aus dem gespeicherten Prozess und dann
  2. fügen Sie die Ausgabe des Stored Proc in die Tabellenvariable ein, und dann
  3. die Tabellenvariable verwenden genauso wie jede andere Tabelle...

... sql ....

Declare @T Table ([column definitions here])
Insert @T Exec storedProcname params 
Select * from @T Where ...

188voto

mmx Punkte 400975

Sie können eine Benutzerdefinierte Funktion または siehe anstelle einer Prozedur.

Eine Prozedur kann mehrere Ergebnismengen zurückgeben, jede mit ihrem eigenen Schema. Sie ist nicht geeignet für die Verwendung in einer SELECT Erklärung.

99voto

CMerat Punkte 4250

Sie wollen entweder eine Tabellenbewertete Funktion oder fügen Sie Ihre EXEC in eine temporäre Tabelle ein:

INSERT INTO #tab EXEC MyProc

76voto

Aamir Punkte 1602

Sie müssen einen Tabellentyp deklarieren, der die gleiche Anzahl von Spalten enthält, die Ihre Speicherprozedur zurückgibt. Die Datentypen der Spalten im Tabellentyp und der von den Prozeduren zurückgegebenen Spalten sollten gleich sein

declare @MyTableType as table
(
FIRSTCOLUMN int
,.....
)  

Dann müssen Sie das Ergebnis Ihrer gespeicherten Prozedur in den gerade definierten Tabellentyp einfügen

Insert into @MyTableType 
EXEC [dbo].[MyStoredProcedure]

Wählen Sie am Ende einfach Ihren Tabellentyp aus

Select * from @MyTableType

59voto

Rizwan Mumtaz Punkte 3685

Sie müssen lesen über OPENROWSET y OPENQUERY

SELECT  * 
INTO    #tmp FROM    
OPENQUERY(YOURSERVERNAME, 'EXEC MyProc @parameters')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X