2009-03-19 14 views
0

ich in einem OLE DB-Ziel das Ergebnis einer sp für jeden Datensatz in einer OLE DB-Quelle einzufügen bin versucht,wie in oledb Ziel von oledb Befehl zum Einfügen

die sp liefert ein Rekord

ich habe dies how to call a stored procedure in SSIS gefunden

, aber ich kann immer noch nicht die outpout Spalten in OleDb Befehlsausgabespalten siehe

hier ist mein sp:

create PROCEDURE [dbo].[GetData] (
    @user  varchar(50) 
) AS 
set nocount on 
-- Publish metadata for ssis 
if 1=0 
begin 
    select '' x, '' y, '' z 
end 

declare @user_tmp table 
(
    x varchar(max), 
    y varchar(max), 
    z varchar(max) 
) 

insert into @user_tmp 
    select 'x1' x, 'y1' y, 'z1' z 

select distinct * from @user_tmp 
set nocount off 

Antwort

0

Ich habe nicht Tabellenvariablen versucht, aber ich weiß, dass SSIS nicht Felder erkennen, wenn Sie temporäre Tabellen verwenden und Tabellenvariablen die gleiche Einschränkung haben. Es erkennt die Felder jedoch, wenn Sie ein CTE verwenden. Wenn Sie ein CTE verwenden können, funktioniert Ihr Proc möglicherweise.

0
  • Führen Sie eine OLE DB-Quelle für die Aufnahme der Ausgabe einer gespeicherten Prozedur in Ihrem Datenfluss verwenden.
  • Verwenden Sie kein OLE DB-Befehl als Quelle.
  • Führen Sie ein OLE DB-Ziel für das Ziel der Ausgabe Ihrer OLE DB-Quelle verwenden (die die SP Ergebnisdaten werden).

  • Fügen Sie ETL-Design-Optionen oder -Anforderungen (Abgeleitete Spalten, Datenkonvertierung usw.) zwischen Quelle und Ziel hinzu.

OLE DB-Befehl wird verwendet, um ein SQL für jede Zeile vorbei durchzuführen, nicht einen Fluss von Daten zu schaffen, zum Beispiel muss eine Zeile-für-Zeile-Typen Ausführung.