Variables in SSIS

lunedì 25 agosto 2008 - 16.26

squilibrium Profilo | Junior Member

Ciao a tutti

Ho creato un package con SSIS di sql server 2005. All'interno del dts ho un foreach loop container che cicla una directory e inserisce il nome del file su di una variabile. Nel ciclo poi ho un execute sql task che dato il valore della variabile, fa un'interrogazione sul db.

Mandandolo in esecuzione, ricevo sempre l'errore:
Executing the query "SELECT dbo.fn_Ritorna2DCOMM_idCMP(?)" failed with the following error: "Syntax error, permission violation, or other nonspecific error". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

Tanto per cominciare mi piacerebbe riuscire a vedere di volta in volta il valore che viene assegnato alla variabile ma non so come fare.

All'interno del dataflow per esempio si possono usare i dataview per vedere i dati che voaggiano nel buffer. C'è uno strumento equivalente per visualizzare il valore delle variabili?

Ciao e grazie

alx_81 Profilo | Guru

>Ciao a tutti
Ciao!

>Mandandolo in esecuzione, ricevo sempre l'errore:
>Executing the query "SELECT dbo.fn_Ritorna2DCOMM_idCMP(?)" failed
>with the following error: "Syntax error, permission violation,
>or other nonspecific error". Possible failure reasons: Problems
>with the query, "ResultSet" property not set correctly, parameters
>not set correctly, or connection not established correctly.
Mi sembra proprio un errore di sintassi.. Quella è una TABLE VALUED FUNCTION?
se sì devi fare:

SELECT <elenco campi> FROM dbo.fn_Ritorna2DCOMM_idCMP(?)

anche se ti consiglio di fare una stored procedure dove richiamare la suddetta select. Ad esempio:

CREATE PROC dbo.proc_Ritorna2DCOMM_idCMP @param int -- metti il tipo corretto AS BEGIN SET NOCOUNT ON; SELECT <elenco campi> FROM dbo.fn_Ritorna2DCOMM_idCMP(@param) END

e poi nel SSIS:

EXEC dbo.proc_Ritorna2DCOMM_idCMP ?

settando il parametro nella sezione corretta.

>
>Tanto per cominciare mi piacerebbe riuscire a vedere di volta
>in volta il valore che viene assegnato alla variabile ma non
>so come fare.
Basta mettere un breakpoint sullo script task (selezionalo e premi F9) e poi controllare, quando si ferma, la finestra locals, alla voce "Variables".

>All'interno del dataflow per esempio si possono usare i dataview
>per vedere i dati che voaggiano nel buffer. C'è uno strumento
>equivalente per visualizzare il valore delle variabili?
No, perchè il control flow non è per i dati. Solo il debug e i breakpoint come ti ho indicato sopra..


>Ciao e grazie
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

squilibrium Profilo | Junior Member

la sintassi è corretta l'ho testata.... La cosa più strana è che il package su un altro computer funziona....
io lo avevo iniziato a sviluppare su una macchina poi l'ho cambiata e ho riscaricato il progetto da source safe e ha cominciato a darmi questo problema

alx_81 Profilo | Guru

>la sintassi è corretta l'ho testata.... La cosa più strana è
>che il package su un altro computer funziona....
>io lo avevo iniziato a sviluppare su una macchina poi l'ho cambiata
>e ho riscaricato il progetto da source safe e ha cominciato a
>darmi questo problema
Allora, se la funzione è uno scalare e la sintassi è corretta (credevo fosse una table valued function), devi vedere con che utente gira il SSIS, e se quell'utente ha le permission di selezionare sulla funzione.. L'errore lo ottieni in esecuzione oppure quando fai il parse della query?

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

squilibrium Profilo | Junior Member

in esecuzione, la validazione la passa....

Come vedo l'utente con il quale gira il SSIS?

Non dovrebbe considerare l'utenza impostata sulla connessione al db?

alx_81 Profilo | Guru

>in esecuzione, la validazione la passa....
>
>Come vedo l'utente con il quale gira il SSIS?
>
>Non dovrebbe considerare l'utenza impostata sulla connessione al db?
dipende se l'utente è un utente sql oppure un utente di windows..
Se è un utente sql, allora devi accertarti che quell'utente abbia i permessi sull'esecuzione di quella funzione..
Se è un utente windows, devi vedere se fa parte di una delle login di sql server..
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

squilibrium Profilo | Junior Member

Ho provato con entrambe.

Quando uso l'autenticazione integrata mi da questo problema.

Quando uso l'utenza sql server mi da invece un errore di password alla validazione di un oledb destination. L'utenza è però corretta e l'errore mi viene segnalato solo quando lo lancio in debug

squilibrium Profilo | Junior Member

mi correggo. Prendeva un utenza errata dal file di configurazione.

Ora in entrambi i casi mi da sempre l'errore che ho scritto all'inizio

alx_81 Profilo | Guru

>Ho provato con entrambe.
>
>Quando uso l'autenticazione integrata mi da questo problema.
E questo in effetti potrebbe essere dovuto al fatto che su una macchina l'utente integrato è admin e può fare ciò che vuole, mentre sull'altra macchina non è altro che public.
>
>Quando uso l'utenza sql server mi da invece un errore di password
>alla validazione di un oledb destination. L'utenza è però corretta
>e l'errore mi viene segnalato solo quando lo lancio in debug
Questo è causa del setting errato della proprietà ProtectionLevel. Il default salva i dati sensibili per una chiave utente. In poche parole i dati sensibili non sono disponibili se si cambia utente (che apre il ssis).

Quindi puoi decidere di salvare i dati proteggendo il package con una password (che devi ricordare sempre) oppure puoi dare i permessi all'utente windows che deve eseguire il package in produzione..

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

alx_81 Profilo | Guru

>mi correggo. Prendeva un utenza errata dal file di configurazione.
>
>Ora in entrambi i casi mi da sempre l'errore che ho scritto all'inizio
Se hai le permission corrette e se la sintassi è giusta, puoi provare a mandarmi il package che gli diamo un'occhiata.. ma credo che il problema stia nell'ambiente su cui gira.. quindi non so se cambia molto..
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

squilibrium Profilo | Junior Member

Penso che hai ragione ma non riesco proprio a capire quali siano le impostazioni errate. Ho controllato l'altra macchina ed è tutto uguale

ti posto comunque il package (non si sa mai). Il problema lo da nel primo execute sql task del foreach container.

Il file è un .rar che ho rinominato in .zip

grazie

squilibrium Profilo | Junior Member

Ho notato una cosa strana

Sul package che avevo sull'altra macchina, per il task incriminato, nella sezione "parameter mapping" ho la possibilità di impostare sia il parameter name che il parameter size mentre nella macchina che da problemi, posso impostare solo il parameter name.

Non è possibile a questo punto che mi manchi qualche aggiornamento di ssis?

alx_81 Profilo | Guru

>Ho notato una cosa strana
>
>Sul package che avevo sull'altra macchina, per il task incriminato,
>nella sezione "parameter mapping" ho la possibilità di impostare
>sia il parameter name che il parameter size mentre nella macchina
>che da problemi, posso impostare solo il parameter name.
>
>Non è possibile a questo punto che mi manchi qualche aggiornamento
>di ssis?
Questo sì, potrebbe essere che manca l'sp1 sul sql della macchina che non ha l'informazione..
Però prova anche a controllare che la proprietà BypassPrepare dell'execute task sia a true.
Se la metto a false mi torna lo stesso errore che ottieni tu, mentre se lo lascio a true, tutto mi funziona.
Poi, nel nome dei connection manager, evita i caratteri come il "." o la ","..
Comunque, commentando il resto, quel task a me funziona.. esegue una mia funzione..


--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

squilibrium Profilo | Junior Member

di solito do nomi sensati alle connessioni ma quella è una connessione creata al volo (la terza o la quarta) tra le varie prove.

Comunque ora sto installando la service pack 2 e vediamo se cambia qualcosa.....

squilibrium Profilo | Junior Member

FUNZIONAAAA!!!!!

Era la service pack.....

grazie per la pazienza

alx_81 Profilo | Guru

>FUNZIONAAAA!!!!!
>
>Era la service pack.....
in effetti sembrava un problema alquanto strano..

>grazie per la pazienza
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5