2013-04-09 23 views
5

Ho una variabile de_sters, una variabile di tipo stringa, come è definita nel mio pacchetto SSIS, il suo ambito è il pacchetto SSIS, che ho bisogno di fill con il valore di più righe da una tabella, utilizzando un pacchetto Execute Sql Task.Il tipo di valore assegnato alla variabile "Utente :: de_sters" differisce dal tipo di variabile corrente

Linea di fondo è che ho un pacchetto "Esegui SQL", in convenienze -> "istruzione SQL" ho scritto:

declare @s varchar(max) = '' 
select @s = case when @s <> '' 
        then @s + ',''' + employer_name + '''' 
        else @s + '''' + employer_name+ '''' 
        end 
from employers 
select @s as Result 

Poi, a Result Set ho selezionato Single Row (prima ho eseguito il mio seleziona e ho visto che restituisce solo una riga). Quindi nella scheda Result Set (lato sinistro) ho scritto nel campo Result NameResult (l'alias della mia precedente istruzione sql) e nel file Variable Name ho scritto User::de_sters.

ma quando corro compito sql mi dà

The type of the value being assigned to variable "User::de_sters" 
differs from the current variable type" error. 

Qualsiasi aiuto o suggerimenti?

+0

@praveen: Ciao, la dichiarazione del foro rendimenti: 'John', 'doe', 'Smith' invece di (linea 1) Giovanni (Linea 2) doe (line3) Smith. Per il mio pacchetto, ho bisogno di avere la stringa esatta "john", "doe", "smith" caricata nella variabile "de_sters", poiché in seguito mi aiuterà a cancellare qualcosa su un altro database. Pertanto se eseguito l'istruzione buca restituirà solo 'john', 'doe', 'smith'. – BogdanM

risposta

5

Il problema è che SSIS non comprende varchar(max) come tipo di dati. È necessario specificare il valore limit. Modificare il valore max su 8000.

declare @s varchar(8000) = '' 

Se la stringa è molto grande quindi utilizzare FullResultSet con varchar(max) nella query e memorizzare il valore in una variabile il cui tipo di dati è object.

Ora, al fine di accedere all'utilizzo oggetto Script task o Script component (flusso di dati) e scrivere il codice sottostante per estrarre il valore dalla variabile object

OleDbDataAdapter oleDA = new OleDbDataAdapter(); 
DataTable dt = new DataTable(); 
oleDA.Fill(dt, Dts.Variables["User::YourVariable"].Value); 
foreach (DataRow rowLoop in dt.Rows) 
    { 
     MessageBox.Show (rowLoop[0].ToString()); 
    } 
+0

Grazie mille praveen. Vi auguro una buona giornata:) – BogdanM

0

Per caricare un campo varchar(max) all'interno SQL Script Tasks in Control flow ad un stringa variabile, dovresti dividerlo in blocchi più piccoli es. varchar(4000) e caricarli a un object, ed entro il prossimo passo aggiungere un foreach loop container per unire di nuovo a una variabile string,

per dividere un testo di grandi dimensioni a testi più piccoli, come le righe che è possibile utilizzare la stored procedure seguente:

CREATE PROCEDURE SSIS_VarcharMax_Loader 
    @Input varchar(max) , 
    @maxRowLength int = 50 
AS 
BEGIN 
SET NOCOUNT ON 


;WITH 
    tmp(inp,c,rn) as (
       select @Input,SUBSTRING(@Input, 1,@maxRowLength),@maxRowLength 
      union all 
       select @Input,SUBSTRING(@Input,rn,@maxRowLength),rn + @maxRowLength 
       from tmp 
       where rn < len(@Input) 
     ) 
     select c from tmp 
     OPTION (MAXRECURSION 500); 

END; 

quindi aggiungere la seguente espressione in un compito espressione contenuta da un contenitore foreach sopra le righe e concat ritorna una stringa,

@strResult = (ISNULL(@[User::strResult])?"": @[User::strResult])+ @[User::str] 

asd asd asd asd asd