Aiuto su stored con all'interno join

mercoledì 21 marzo 2007 - 19.20

trinity Profilo | Guru

Ho scritto questa stored al cui interno vi sono varie join:

CREATE PROCEDURE [dbo].[GetSchedinePS_6] ( @AnnoGestionale Int, @NSchedina Int, @IdComponente Int ) AS BEGIN SET NOCOUNT ON; SELECT PS.AnnoGestionale, PS.NSchedina, PS.IdComponente, PS.DataArrivo, PS.DataPartenza, PS.CodAlloggiato, PS.Cognome, PS.Nome, PS.Sesso, PS.DataNascita, PS.LuogoNascita, PS.Provnascita, PS.IdStatoNascita, StatoNascita=N1.Descrizione, PS.IdCittadinanza, StatoCittadinanza=N2.Descrizione, PS.LuogoResidenza, PS.ProvResidenza, PS.IdStatoResidenza, StatoResidenza=N3.Descrizione, PS.NDocumento, PS.LuogoDocumento, PS.IdStatoDocumento, StatoDocumento=N4.Descrizione, PS.IdDocumento, Documento=D.Descrizione FROM SchedinePs PS JOIN NazioniPS N1 ON N1.CodNaz= PS.IdStatoNascita JOIN NazioniPS N2 ON N2.CodNaz= PS.IdCittadinanza JOIN NazioniPS N3 ON N3.CodNaz= PS.IdStatoResidenza JOIN NazioniPS N4 ON N4.CodNaz= PS.IdStatoDocumento JOIN Documenti D ON D.CodDoc= PS.IdDocumento WHERE PS.AnnoGestionale=@AnnoGestionale AND PS.NSchedina=@NSchedina AND PS.IdComponente=@IdComponente END

solo che quando vado ad eseguirla in sql server mi riporta il seguente messaggio di errore:

Messaggio 245, livello 16, stato 1, procedura GetSchedinePS_6, riga 15
Conversione non riuscita durante la conversione del valore varchar 'DNULL' nel tipo di dati int.

Come posso risolvere?

Ciao

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

lbenaglia Profilo | Guru

>FROM
>SchedinePs PS
>JOIN
>NazioniPS N1
>ON N1.CodNaz= PS.IdStatoNascita
>JOIN
>NazioniPS N2
>ON N2.CodNaz= PS.IdCittadinanza
>JOIN
>NazioniPS N3
>ON N3.CodNaz= PS.IdStatoResidenza
>JOIN
>NazioniPS N4
>ON N4.CodNaz= PS.IdStatoDocumento
>JOIN
>Documenti D
>ON D.CodDoc= PS.IdDocumento
>WHERE
>PS.AnnoGestionale=@AnnoGestionale AND PS.NSchedina=@NSchedina
>AND PS.IdComponente=@IdComponente

>solo che quando vado ad eseguirla in sql server mi riporta il
>seguente messaggio di errore:
>
>Messaggio 245, livello 16, stato 1, procedura GetSchedinePS_6,
>riga 15
>Conversione non riuscita durante la conversione del valore varchar
>'DNULL' nel tipo di dati int.
>
>Come posso risolvere?

Ciao Fabio,

Nelle clausole ON oppure nella clausola WHERE stai confrontando due colonne oppure una colonna e una variabile con data type varchar e int.
Dato che int ha precedenza superiore rispetto a varchar, SQL Server cercherà di effettuare un cast implicito da varchar a int, ma se il valore non è convertibile (come nel tuo caso) otterrai l'eccezione riportata.

Verifica attentamente i data type di quelle colonne...

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

trinity Profilo | Guru

>>Documenti D
>>ON D.CodDoc= PS.IdDocumento

hai ragione è così:
ON D.Id= PS.IdDocumento


solo che vado ad eseguire la stored non mi da errore ma nn mi esce nessun risultato eppure i dati dentro la tebella ci sono e i parameters li imposto correttamente

Ciao

>>WHERE
>>PS.AnnoGestionale=@AnnoGestionale AND PS.NSchedina=@NSchedina
>>AND PS.IdComponente=@IdComponente
>
>>solo che quando vado ad eseguirla in sql server mi riporta il
>>seguente messaggio di errore:
>>
>>Messaggio 245, livello 16, stato 1, procedura GetSchedinePS_6,
>>riga 15
>>Conversione non riuscita durante la conversione del valore varchar
>>'DNULL' nel tipo di dati int.
>>
>>Come posso risolvere?
>
>Ciao Fabio,
>
>Nelle clausole ON oppure nella clausola WHERE stai confrontando
>due colonne oppure una colonna e una variabile con data type
>varchar e int.
>Dato che int ha precedenza superiore rispetto a varchar, SQL
>Server cercherà di effettuare un cast implicito da varchar a
>int, ma se il valore non è convertibile (come nel tuo caso) otterrai
>l'eccezione riportata.
>
>Verifica attentamente i data type di quelle colonne...
>
>Ciao!
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/
>http://italy.mvps.org

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

lbenaglia Profilo | Guru

>hai ragione è così:
>ON D.Id= PS.IdDocumento
Eh, e questo non è bello

>solo che vado ad eseguire la stored non mi da errore ma nn mi
>esce nessun risultato eppure i dati dentro la tebella ci sono
>e i parameters li imposto correttamente
Probabilmente gestisci l'eccezione in qualche modo lato client.
Se la esegui da QA o da SSMS ottieni l'errore riportato nel primo post, giusto?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alx_81 Profilo | Guru

>>>Documenti D
>>>ON D.CodDoc= PS.IdDocumento

Come ti ho risposto nel post in cui mi indicavi la stored procedure incriminata, fai attenzione anche agli altri criteri di join, sono tutti errati.. Per intenderci, i codNaz con gli id della tabella SchedinePS.. vanno tutti cambiati con la relazione sugli id..
Te lo dico perchè potresti non accorgerti mai del problema, poichè i datatype di quelle relazioni sono compatibili.. potresti trovarti join che non generano errori ma che ti tornano record relazionati in modo errato oppure, nel peggiore dei casi (vedi la inner join) potresti trovarti record in meno di quanti te ne aspetti..
abbiamo fatto un lungo discorso sugli id, ricordi?
Ti consiglio di rileggere per bene il post originale.. affinchè tu possa capire perchè quelle join sono errate..
ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

trinity Profilo | Guru

risolto grazie!!!
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
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