Errore nel case....when

lunedì 04 agosto 2008 - 11.54

trinity Profilo | Guru

Dove sbaglio nel case?

UPDATE Archivio_mov_new SET dataarrivo=@dataArrivo,
Case @flag WHEN 1 then datapartenza=@datapartenza ELSE END,
idstato=@idstato,idcomune=@idcomune,idgruppo=@idgruppo
Where codalbergo=@codalbergo

ecco il messaggio di errore: Sintassi non corretta in prossimità della parola chiave 'Case'.


e a questa ?

SELECT progschedina, MIN(iddb) AS id
FROM dbo.ARCHIVIO_MOV_NEW
WHERE progschedina = @progschedina And
Case @Flag When 0 Then datapartenza Is Null Else datapartenza=@datapartenza END
GROUP BY progschedina

ecco il messaggio di errore: Sintassi non corretta in prossimità della parola chiave 'Is'.
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Dove sbaglio nel case?
>
Sintassi errata. Ecco quella corretta:

UPDATE Archivio_mov_new SET dataarrivo=@dataArrivo , datapartenza = CASE WHEN @flag = 1 THEN @datapartenza ELSE datapartenza END , idstato=@idstato , idcomune=@idcomune , idgruppo=@idgruppo WHERE codalbergo=@codalbergo

>e a questa ?
Questa la farei così:

SELECT progschedina , MIN(iddb) AS id FROM dbo.ARCHIVIO_MOV_NEW WHERE progschedina = @progschedina And ISNULL(datapartenza,'19000101') = Case When @Flag = 0 Then '19000101' Else @datapartenza END GROUP BY progschedina

--

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

trinity Profilo | Guru

>>Dove sbaglio nel case?
>>
>Sintassi errata. Ecco quella corretta:
>
>UPDATE
> Archivio_mov_new
>SET
> dataarrivo=@dataArrivo
> , datapartenza = CASE
>WHEN @flag = 1 THEN @datapartenza
> ELSE datapartenza
> END
> , idstato=@idstato
> , idcomune=@idcomune
> , idgruppo=@idgruppo
>WHERE
> codalbergo=@codalbergo

ok

>
>SELECT
> progschedina
> , MIN(iddb) AS id
>FROM
> dbo.ARCHIVIO_MOV_NEW
>WHERE
> progschedina = @progschedina And
> ISNULL(datapartenza,'19000101') = Case When @Flag = 0 Then '19000101'
>Else @datapartenza
>END
>GROUP BY progschedina
>
qui io ho la seguente situazioni di dati:

IDdb,progschedina,codalbergo,codcomalbergo,dataarrivo,datapartenza
4 2 1000 60038 22/07/2008 0.00.00 NULL
5 2 1000 60038 22/07/2008 0.00.00 NULL
6 2 1000 60038 22/07/2008 0.00.00 NULL
7 2 1000 60038 22/07/2008 0.00.00 NULL
8 2 1000 60038 22/07/2008 0.00.00 NULL
9 3 1000 60038 22/07/2008 0.00.00 NULL

come puoi vedere il campo data partenza è Null
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>come puoi vedere il campo data partenza è Null
Quindi? Dove sta il problema?
--

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

trinity Profilo | Guru

il problema che ho provato e con la tua procedura mi aggiorna solo un record.
Ossia ho 5 record con dat arrivo =22/07/2008 e tutti devono essere aggiornati a 23/07/2008
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>il problema che ho provato e con la tua procedura mi aggiorna
>solo un record.
A me sembra corretta:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
--

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

trinity Profilo | Guru

Ops scusami tanto hai ragione il problema non sta nell'update quello funziona a me sta prima ossia

quando eseguo questo codice:

WITH CTE_GetID AS
(
SELECT progschedina, MIN(iddb) AS id
FROM dbo.ARCHIVIO_MOV_NEW
WHERE progschedina = @progschedina And
ISNULL(datapartenza,'19000101') = Case When @Flag = 0 Then '19000101' Else @datapartenza
GROUP BY progschedina
)

ti spiego meglio l'update viene richiamato da un applicativo in vb e precisamente viene eseguito in un ciclo for..next in quanto in base a dei criteri posso mediate il ciclo for stabilire quanti record devo essere aggiornati, ossia del giorno 22/07 possono essere aggiornati tutti e 5 oppure solo 3...
Il codice in alto mi serve per ricavare l'id (key primary), uno per volta in mdo da poter aggiornare il record che desidero ma a volte la data di partenza può essere NUll oppure avere un valore.

questa riga di codice che tu mi hai consigliato:
ISNULL(datapartenza,'19000101') = Case When @Flag = 0 Then '19000101' Else @datapartenza

funziona ma mi aggiorna solo un record e non tutti e 5 in quanto la dat di partenza resta sempre null fin dal primo record e pertanto non passa mai al successivo.

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>questa riga di codice che tu mi hai consigliato:
>ISNULL(datapartenza,'19000101') = Case When @Flag = 0 Then '19000101'
>Else @datapartenza
>funziona ma mi aggiorna solo un record e non tutti e 5 in quanto
>la dat di partenza resta sempre null fin dal primo record e pertanto
>non passa mai al successivo.
Quella condizione che ti ho messo, mette 19000101 dove hai null, per fare la condizione. Ma da quello che mi hai passato non posso sapere come si comporta il @flag. Purtroppo, non vedendo l'applicativo non riesco a capire dove sta il blocco. Con la With in teoria ricavi un elenco di record, che poi utilizzerai in un'altra query, quindi, o guardiamo per bene passo dopo passo cosa non funziona, oppure non posso aiutarti.
Se ti va, cominciamo dall'applicativo..
--

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