3 Stimmen

Verwendung des Ergebnisses einer Stored Procedure in einer Select-Anweisung

Ich habe eine gespeicherte Prozedur, die eine Dataset(Table) . Wie kann ich das Ergebnis dieser gespeicherten Prozedur in einer SELECT Aussage?

Ich brauche so etwas wie das hier

SELECT T1.* 
FROM Dummy T0
     INNER JOIN
     (EXEC [dbo].[SPGetResults] '900',300,'USD') T1 
     ON T1.aKey=T0.aKey

Ich verwende SQL Server 2005

3voto

nathan gonzalez Punkte 11537

Ich stimme Marcelo größtenteils zu, aber wenn Sie auf die Verwendung einer gespeicherten Prozedur festgelegt sind, oder Ihre gespeicherte Prozedur tut alles, was Daten betrifft, könnten Sie eine erstellen #temp Tabelle mit der Struktur der Ausgabe Ihrer gespeicherten Prozedur, und tun Sie dann etwas wie

INSERT INTO #temp
EXEC [dbo].[SPGetResults] '900',300,'USD'

Führen Sie dann Ihre Joins und Selects in der temporären Tabelle durch.

1voto

Marcelo Cantos Punkte 173498

Erstellen Sie stattdessen eine benutzerdefinierte Funktion mit Tabellenwert.

1voto

Mo Chavoshi Punkte 545

Die Antwort von Marcelo Cantos ist die beste. Auch für verteilte Abfragen können Sie das folgende Skript verwenden:

USE [master]

sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE

USE [YourDB]

SELECT *
FROM OPENROWSET('SQLNCLI', 'Server=YourServer ;Trusted_Connection=yes;',
    'EXEC YourDB.YourSchema.YourSP ''YourParameters1'', YourParameters2') AS c
INNER JOIN YourTableOrView ap ON ap.YourPK = c.YourFK

http://www.kodyaz.com/articles/how-to-sql-select-from-stored-procedure-using-openquery-openrowset.aspx

0voto

The King Punkte 4572

Verwenden Sie Einfügen in ... Ausführen und speichern das Ergebnis in einer Temp-Tabelle... Dann können Sie die Temp-Tabelle in Ihrer Select-Anweisung verknüpfen.

Alternativ können Sie, wie bereits vorgeschlagen, versuchen, die SP in eine tabellenwertige Funktion umzuwandeln.

Dieser Link bietet Ihnen viel mehr Möglichkeiten... http://www.sommarskog.se/share_data.html

0voto

S'chn T'gai Spock Punkte 1007

Hier ist ein einfaches Beispiel für eine benutzerdefinierte Funktion der Tabelle Value:

create function personSidsByLastName(@lastName varchar(20))
returns table
as 
return 
select personSid from Person where lastName like @lastName

select * from PersonAddress pa where pa.personSid in (select personSid from personSidsByLastName('ali'))

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