Bei einer relationalen Abfrage ist das Problem ja relativ einfach behoben.
SELECT * FROM
OPENQUERY(
LinkedServer,
'SELECT ID="diese Abfrage im OPENQUERY wäre jetzt halt länger wie 8.000 Zeichen" FROM dbo.test'
)
wenn das fehlschlägt einfach ein
DECLARE @sql VARCHAR(MAX) = ''
SET @sql = 'SELECT ID="diese Abfrage im OPENQUERY wäre jetzt halt länger wie 8.000 Zeichen" FROM dbo.test'
EXEC (@sql) AT [LinkedServer]
und gelöst ist das Problem. Das kleine AT nach dem EXEC mit dem LinkedServer ist der Trick. Nur mit EXEC und dem Code von oben in der Variablen würde es nicht funktionieren.
Jetzt habe ich aber ein MDX, das ich nicht nur abfragen sondern auch noch weiter verwenden möchte. In meinem Fall mach ich erst einen relationale Abfrage und möchte diese um multidimensionale Daten anreichern.
Also so was wie
SELECT Jahr, relationalerWert, multidimensionalerWert = NULL FROM dbo.Beispiel
und jetzt Werte in die Spalte multidimensionalerWert bekommen.
Ich habe das so gelöst - nicht schön - aber es funktioniert wenigstens. Und bitte immer annehmen das die LinkedServer Abfrage nicht so klein wie meine hier sind sondern richtig lang!
Ich baue mir das MDX
SELECT ({ Wert }) ON 0, ([Datum].[Jahr].MEMBERS) ON 1 FROM TestCube
dieses LANGE MDX packe ich in eine Variable
DECLARE @mdx VARCHAR(MAX) = ''
SET @mdx = 'SELECT ({ Wert }) ON 0, ([Datum].[Jahr].MEMBERS) ON 1 FROM TestCube'
Dann wieder wie oben
EXEC (@mdx) AT LinkedServer
und ich bekomme Werte zurück
So was wie
[Datum].UNIQUE_MEMBER, [Datum].MEMBER_CAPTION, [Wert]
Hilft noch nicht so viel
Jetzt baue ich mir eine temporäre Tabelle (oder Tbl. Variable)
CREATE TABLE #mdxResult (JahrID VARCHAR(500), JahrName VARCHAR(500), Wert VARCHAR(500))
und jetzt aus dem Exec in die Tabelle
INSERT INTO #mdxResult (JahrID, JahrName, Wert)
EXEC (@mdx) AT LinkedServer
Und jetzt habe ich die Daten aus der verdammt langen MDX OPENQUERY Abfrage in einer Tabelle und muss nur noch einen JOIN machen.
SELECT * FROM dbo.Beispiel AS relational
LEFT JOIN #mdxResult AS mdx ON mdx.JahrName = relational.Jahr
Und - nicht schön! aber geht.
Hoffentlich hilft es jemandem. Ich würde mich über Kommentare freuen.
Oder kennst Ihr sogar noch einen besseren Weg?
Keine Kommentare:
Kommentar veröffentlichen