Zuweisen eines Werts aus einer Ergebnismenge für eine einzelne Zeile in ssis, was zu einem Fehler in SSIS 2012 führt

Ich versuche, CSV-IDs aus einer Tabelle vom SQL Server abzurufen und das Ergebnis einer Variablen zuzuweisen. Unten ist die SQL, die ich in das @ gesetzt haExecute SQL Task

set nocount on
declare @csv varchar(max) = ''
select @csv = @csv + cast(companyid as varchar(10)) + ',' from company where isprocessed = 0
select substring(@csv,1,len(@csv) - 1) as companyids

Wie Sie sehen können, ist dies eine einfache und standardmäßige Methode, um die CSV eines Feldes in t-sql abzurufen. Es funktioniert perfekt im Abfragefenster, wirft aber den folgenden Fehler aus, wenn ich den Task in SSIS 2012 @ ausführ

[SQL-Task ausführen] Fehler: Der Werttyp (__ComObject) kann nur in Variablen vom Typ Object konvertiert werden.

[SQL-Task ausführen] Fehler: Beim Zuweisen eines Werts zur Variablen "sCSVCompanyIds" ist ein Fehler aufgetreten: "Der Typ des Werts (DBNull), der der Variablen" User :: sCSVCompanyIds "zugewiesen wird, unterscheidet sich vom aktuellen Variablentyp (String). Variablen dürfen den Typ während der Ausführung nicht ändern. Variablentypen sind streng, mit Ausnahme von Variablen vom Typ "Object". ".

Below sind die Einstellungen von Execute SQL Task

ImAllgemeineegisterkarte @, Resultset-Projekt ist auf @ gesetsingle rowImResult Set tab, Result Name ist auf 0 gesetzt (ich habe es auch versucht, indem ich es auf @ gesetzt hacsvids (dies ist der Name der Aliasspalte in der Auswahlliste) und Variablenname ist auf @ gesetzUser::sCSVCompanyIds

Ich habe keine Ahnung, warum es nicht funktioniert. Nachdem ich so viel Zeit verschwendet habe, bin ich auf die harte Tour gekommen, indem ich das Ergebnis als Full Row set zurückgegeben habe (dieselbe SQL, die immer 1 Zeile 1 Spalte zurückgibt) und für jeden Schleifencontainer ein addiere, um die Ergebnismenge in eine Schleife zu werfen (die immer iteriert) nur einmal aus offensichtlichen Gründen) und weisen Sie der Variablen die Felder der Ergebnismenge zu. Es funktioniert für mich, aber es sollte einen einfachen Weg geben, es zu tun. Was mir fehlt?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage