Ssis attività esegui sql

lunedì 22 dicembre 2008 - 17.49

memmo77 Profilo | Expert

Salve ho questo problema. Sto effettuando un update di una tabella tramite questo task. Se non passo i parametri (?) ma direttamente i valori, funziona correttamente.
Quando la parametrizzo e passo i valori, che sono giusti, mi dice:

"Impossibile associare l'identificatore in più parti "ICAAP_SAA.DBO.AGGR_PROC_STR.ID_PROC_STR"

In pratica questo parametro fa riferimento ad una tabella, mentre gli altri fanno riferimento alla tabella in cui faccio l'update.

UPDATE T_VALORI_ICAAP SET SYS_USER = ? ,SYS_DATA_AGGIOR = GETDATE() ,[TC_1] = 0 ,[TC_2] = 0 ,[TC_3] = 0 ,[TC_4] = 0 ,[TC_5] = 0 ,[TC_6] = 0 ,[TC_7] = 0 ,[TC_8] = 0 ,[TC_9] = 0 ,[TC_10] = 0 ,[TC_11] = 0 ,[TC_12] = 0 ,[TC_13] = 0 ,[TC_14] = 0 ,[TC_15] = 0 ,[TC_16] = 0 ,[TC_17] = 0 ,[TC_18] = 0 ,[TC_19] = 0 ,[TC_20] = 0 ,[TC_21] = 0 ,[TC_22] = 0 ,[TC_23] = 0 ,[TC_24] = 0 FROM T_VALORI_ICAAP INNER JOIN T_DIZ_RACCORDO AS RACC ON RACC.FK_ID_LIV0 = T_VALORI_ICAAP.FK_ID_LIV0 AND RACC.FK_ID_LIV1 = T_VALORI_ICAAP.FK_ID_LIV1 AND RACC.FK_ID_LIV2 = T_VALORI_ICAAP.FK_ID_LIV2 AND RACC.FK_ID_LIV3 = T_VALORI_ICAAP.FK_ID_LIV3 INNER JOIN T_DIZ_AGGR_DESCRIZIONI AS AGGR ON AGGR.ID_AGGR = RACC.FK_ID_AGGR AND AGGR.STEP = 1 INNER JOIN T_DIZ_AGGR_DESCRIZIONI_PROC_STR AS AGGR_PROC_STR ON AGGR_PROC_STR.ID_AGGR = AGGR.ID_AGGR INNER JOIN T_DIZ_RACCORDO_PROC_STR AS RACC_PROC_STR ON RACC_PROC_STR.ID_RACCORDO = RACC.ID_RACCORDO WHERE T_VALORI_ICAAP.FK_ID_ENTE = ? AND T_VALORI_ICAAP.FK_ANNO = ? AND T_VALORI_ICAAP.FK_MESE = ? AND AGGR_PROC_STR.ID_PROC_STR = ? AND RACC_PROC_STR.ID_PROC_STR = AGGR_PROC_STR.ID_PROC_STR

Come posso fare?
Spero di essermi spiegato. Grazie

alx_81 Profilo | Guru

>Salve ho questo problema.
Ciao!

>In pratica questo parametro fa riferimento ad una tabella, mentre
>gli altri fanno riferimento alla tabella in cui faccio l'update.
L'update che scrivi non è corretta. Quella where, per come la scrivi tu è un modo di indicare una INNER JOIN. Ma così non può funzionare..
Se tu devi aggiornare i dati di una tabella, solo se sono legati ad un'altra, devi usare una UPDATE FROM, realizzandola con la sintassi che già usi ma mettendo nella where i soli parametri e legando le due tabelle nelle clausole di JOIN. Ora, per come è fatta la tua query faccio un po' fatica a dirti dove mettere il legame, ma non nella where.
Probabilmente dovrai aggiungere una INNER JOIN con la tabelle IT_DIZ_RACCORDO_PROC_STR legandola al resto della query sul campo che usi nella where.
Per fare update di questo tipo, ti consiglio prima di fare la corrispondente SELECT per capire se il risultato è quello che aspettavi.


--

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

memmo77 Profilo | Expert

>>L'update che scrivi non è corretta.
L'ho scritta così per tentare di risolvere il problema. Se eseguo la query da sql, questa funziona correttamente (anche se non scritta correttamente). Nella stessa query, fatta "girare" su ssis ma passando direttamente i valori invece dei parametri ?, funziona correttamente.
Inizialmente volevo scrivere una cosa del genere:

FROM T_VALORI_ICAAP INNER JOIN T_DIZ_RACCORDO AS RACC ON RACC.FK_ID_LIV0 = T_VALORI_ICAAP.FK_ID_LIV0 AND RACC.FK_ID_LIV1 = T_VALORI_ICAAP.FK_ID_LIV1 AND RACC.FK_ID_LIV2 = T_VALORI_ICAAP.FK_ID_LIV2 AND RACC.FK_ID_LIV3 = T_VALORI_ICAAP.FK_ID_LIV3 INNER JOIN T_DIZ_AGGR_DESCRIZIONI AS AGGR ON AGGR.ID_AGGR = RACC.FK_ID_AGGR AND AGGR.STEP = 1 INNER JOIN T_DIZ_AGGR_DESCRIZIONI_PROC_STR AS AGGR_PROC_STR ON AGGR_PROC_STR.ID_AGGR = AGGR.ID_AGGR AND AGGR_PROC_STR.ID_PROC_STR = ? INNER JOIN T_DIZ_RACCORDO_PROC_STR AS RACC_PROC_STR ON RACC_PROC_STR.ID_RACCORDO = RACC.ID_RACCORDO AND RACC_PROC_STR.ID_PROC_STR = ? WHERE T_VALORI_ICAAP.FK_ID_ENTE = ? AND T_VALORI_ICAAP.FK_ANNO = ? AND T_VALORI_ICAAP.FK_MESE = ?

Passando i parametri nelle inner join, ma non funziona comunque.
Sembra quasi che non riesca a risolvere i nomi di + tabelle, ma solo quando passo i parametri ?. Se attribuisco direttamente i valori, funziona.
Non so da cosa possa dipendere?
Grazie ciao

alx_81 Profilo | Guru

il fatto è che non trovo quello per cui ottieni l'errore

"Impossibile associare l'identificatore in più parti "ICAAP_SAA.DBO.AGGR_PROC_STR.ID_PROC_STR"

Non lo trovo nella tua 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

memmo77 Profilo | Expert

L'errore mi esce solo su ssis sul task esegui sql. Se faccio girare la query direttament da sql manager funziona correttamente.
Boh non capisco proprio da cosa dipenda.

alx_81 Profilo | Guru

>L'errore mi esce solo su ssis sul task esegui sql. Se faccio
>girare la query direttament da sql manager funziona correttamente.
>Boh non capisco proprio da cosa dipenda.
Postami la create delle tabelle in join, poi passami i parametri che passi a quella query..
faccio un paio di prove con SSIS..
--

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

memmo77 Profilo | Expert

ecco sono queste. Ciao e grazie

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

alx_81 Profilo | Guru

>ecco sono queste. Ciao e grazie
Mi dispiace, ma a me funziona, copiando pari pari la tua query, mettendo i 5 parametri, e non saprei proprio ripetere il tuo errore.
--

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