Ich habe eine gespeicherte Prozedur, die funktionieren soll wie folgt:Wie konsolidiere ich Ergebnisse aus mehreren Aufrufen einer gespeicherten Prozedur?
DECLARE @TagNames AS TABLE
(
tag NVARCHAR(50) NOT NULL
)
-- Get list of tags
INSERT INTO @TagNames
SELECT tag
FROM tagTable
WHERE tag LIKE @tagPattern
-- Create unified result set, combining results from stored proc for each tag
SELECT n.tag, r.time, r.value FROM @TagNames AS n
CROSS APPLY
dbo.GetResultsForTag(n.tag) AS r -- Not valid
Allerdings kann ich nicht CROSS APPLY verwenden, da dbo.GetResultsForTag()
eine gespeicherte Prozedur ist.
Die Implementierung von dbo.GetResultsForTag()
beruht auf dem Aufruf EXEC
auf dynamischen SQL an einen Verbindungsserver übergeben, so dass ich glaube, es kann nicht in eine Tabellenwertfunktion umgewandelt werden. Dynamisches SQL ist in Tabellenfunktionen nicht zulässig.
Der Verbindungsserver kommuniziert über einen OLE-DB-Anbieter, aber es handelt sich nicht um eine SQL Server-Instanz. Es ist eine OSISoft PI Prozess Historian Datenbank. Normalerweise ist es ziemlich einfach, mehrere Daten-Tags in einer einzigen Abfrage abzufragen, aber in diesem Fall mache ich ein paar Berechnungen, bei denen ich einen Filterausdruck angeben muss, der einen einzelnen Tag-Namen angibt. Daher benötigt jedes Tag eine separate Abfrage an die Datenquelle.
Soweit ich weiß, können gespeicherte Prozeduren nicht als die rechte Seite eines JOIN verwendet werden?
Welche anderen Optionen stehen mir zur Verfügung, um diese Ergebnisse zusammenzuführen? Nur ein Cursor?
Bearbeiten: Ich habe herausgefunden, wie Sie die zugrunde liegenden Hindernisse beheben, die mich zwangen, dynamisches SQL und eine gespeicherte Prozedur zu verwenden. Jetzt kann ich reguläres SQL verwenden, das mir erlaubt, eine Table Valued Function anstelle eines gespeicherten Proc zu verwenden, was mir erlaubt, JOIN und CROSS APPLY anstelle von hässlichen Cursor-Hacks zu verwenden.
Welche SQL Server-Version verwenden Sie? – Coder1991
SQL Server 2016 Standard Edition – Hydrargyrum
http://www.sommarskog.se/share_data.html – user6144226