0

alle.SSIS Ole DB Quelle als gespeicherte Prozedur vom Verbindungsserver mit Parametern

Ich verwende gespeicherte Prozeduren vom Verbindungsserver. Ich möchte das Verfahren in Ole DB Quelle verwenden.

Ich schrieb die Abfrage, die in SSIS funktioniert.

select ID, 

LAST_NAME_ENG, 

LAST_NAME_G, 

FST_NAME_ENG, 

FST_NAME_G, 

BIRTHDATE 

from openquery (linkedserver, 
'exec [linkedserver].get_records @SESSION_ID = 12 , @SYSTEM = ''oCRM'', @ENTITY_NAME = ''CLIENT'' 

WITH RESULT SETS (([ID] [int] NOT NULL, 

[LAST_NAME_ENG] [varchar](50) NOT NULL, 

[LAST_NAME_G] [varchar](50) NOT NULL, 

[FST_NAME_ENG] [varchar](50) NOT NULL, 

[FST_NAME_G] [varchar](50) NOT NULL, 

[BIRTHDATE] [date] NOT NULL))'); 

Ich kann es in SSIS OLE Db-Quelle verwenden und erforderliche Daten erfolgreich erhalten. Aber im nächsten Schritt gibt es das Problem:

Ich muss den Parameter an die @ SESSION_ID von SSIS anstelle von '12' übergeben. Und ich kann den richtigen Weg nicht finden.

Es gibt viele Ratschläge, Dynamics sql zu verwenden und vollständige Abfragezeichenfolge mit erforderlichen Parameterwerten zu erstellen und dann auszuführen, aber wenn ich es tun werde - das SSIS konnte keine Spaltendaten von der Dynamikabfrage abrufen.

Gibt es Möglichkeiten, es zu lösen? Alle Ideen werden hilfreich sein.

Vielen Dank.

Mit freundlichen Grüßen, Yuriy.

+0

Warum verbinden Sie sich nicht direkt mit dem anderen Server? –

+0

Das ist mir leider nicht erlaubt. –

Antwort

1

Erstellen Sie eine Zeichenfolgenvariable, z. B. SQL_Query. In Variablendefinition - set EvaluateAsExpression und definieren Ausdruck als "your SQL statement ... @SESSION_ID = " + [User::Session_ID_Variable] + " rest of SQL statement" wobei Session_ID_Variable Ihren bedingten Wert enthält. Wenn Session_ID_Variable keine Zeichenfolge ist, müssen Sie sie in eine Zeichenfolge mit (DT_WSTR, length) umwandeln. Ergebnis in SQL_Query wird Ihr Ziel SQL-Ausdruck sein.
Dann in OLE DB-Quelle - Variable als SQL-Befehlsquelle angeben und [User :: SQL_Query] auswählen.
Stored Procedure müssen in allen Fällen Resultsets des gleichen Formats zurückgeben. Wenn SP kein Resultset zurückgibt, schlägt die DataSource fehl.

+0

Hallo, Ferdipux. Vielen Dank für Ihre Antwort. Es funktioniert gemeinsam. Aber ich kann den Ole DB Quellblock erfolgreich validieren und nur speichern, wenn ich die Variable @ SESSION_ID den Bezeichner der vorhandenen Sitzung übergebe. Wenn eine solche Sitzung nicht existiert - bekomme ich einen Fehler https://i.gyazo.com/5bbaf08a3884b8600439b6ea31212da1.png –

+0

Das ist normal. In der Paketentwicklungsphase müssen Sie alle Komponenten validieren. Daher muss OLE DB-Quelle einige Zeilen zurückgeben, um Metadaten zu bestimmen. Zur Laufzeit sind Null-Ergebnisse in Ordnung. – Ferdipux

+0

https://i.gyazo.com/7e076b41384c2e8003637618fa13c0b6.png Leider funktioniert es nicht ( –

Verwandte Themen