Auto su una creazione di una stored procedure

lunedì 11 giugno 2007 - 16.06

trinity Profilo | Guru

Allora cerco di spiegarmi bene per aiutare anche voi a capire.
Premetto che una serie di miei clienti del ca.... mi stanno levando i sentimenti e per contratto devo assolutamente far partire un progetto...
Pertanto vi chiedo terribilmente la vostra mano.
Ora vi spiego

io un un database sql server 2005 ho una tabella del tipo:

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


come potete vedere anche dal codice di origine ci 3 campi per per importanti e sono: data_elaborazione, stato, ncomp

ora vi spiego, questi sono record di movimenti di alberghi e pertanto nella tabella possiamo trovarci di fronte al seguente scenario:

codalbero codcomalb data_elaborazione stato ncomp codstato codcomune
1 32 10/06/2007 A 5 999 91
1 32 11/06/2007 P 2 999 91
2 32 10/06/2007 A 10 35
2 32 11/06/2007 P 2 35

gli altri campi non li ho citati.
Tradotto questi due record stanno a significare che dell'albergo con codice 1 del comune con codice 32 in data 10 giugno sono arrivati 5 persone con codice 999(italia) e codcomune 91(terracina) e l'undici giugno ne sono partiti 2.
poi nell'abergo 2 sono arrivati in data 10 giugno 10 persone con codice 35(tedeschi) e l'undici giugno ne sono partiti 2.

io da questi record devo creare quanto segue:

un file txt che ha le seguenti modalità:

1,32,10/06/2007,11/06/2007,999,91
1,32,10/06/2007,11/06/2007,999,91
1,32,10/06/2007,,999,91
1,32,10/06/2007,,999,91
1,32,10/06/2007,,999,91

e cosi via anche per i tedeschi.

cioè mettere su uno stesso record anche la data che rappresenta la partenza per il numero di componenti che sono partiti.

Spero di esswermi fatto capire.

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

Mato Profilo | Newbie

l'unica soluzione è che uso di cicli e cursori in quanto con delle select secche non riesci a fare in modo semplice un mumero di insert pari al valore che hai nei campo ncomp!

in pratica devi aggiungere alla stored una cosa del tipo:
.........
.........
DECLARE @numRow int
DECLARE ShiftCursorValue CURSOR FOR
SELECT
codalbero,codcomalb,data_elaborazione,stato,ncomp,codstato,codcomune
FROM
Archivio_mov
OPEN ShiftCursorValue
FETCH NEXT FROM ShiftCursorValue INTO @codalbero,@codcomalb,@data_elaborazione,@stato,@ncomp,@codstato,@codcomune
WHILE @@FETCH_STATUS = 0
BEGIN
SET @numRow = @ncomp
IF (@stato = 'A')
EGIN
WHILE @numRow <> 0
BEGIN
INSERT INTO #tblTemp
(numRow,codalbero,codcomalb,data_Arrivo,data_Partenza,codstato,codcomune)
VALUES
(@numRow , @codalbero,@codcomalb,@data_elaborazione,null,@codstato,@codcomune)
SET @numRow = @numRow - 1
END
END
ELSE
BEGIN
WHILE @numRow <> 0
BEGIN
UPDATE
#tblTemp
SET data_Partenza = @data_elaborazione
WHERE
(codalbero = @codalbero AND
codcomalb = @codcomalb AND
data_Arrivo = @data_elaborazione ,
data_Partenza is null AND
codcomune = @codcomune AND
numRow = @numRow)
END
SET @numRow = @numRow - 1
END
FETCH NEXT FROM ShiftCursorValue INTO @codalbero,@codcomalb,@data_elaborazione,@stato,@ncomp,@codstato,@codcomune
END
CLOSE ShiftCursorValue
DEALLOCATE ShiftCursorValue
.........
.........
poi la devi circondare con la dichiarazione della tabella temporane #tbmTemp, e con lesportazione in un file di testo di questa.

ps. . . lo so che è piena di errori, ma non l'ho provata!

trinity Profilo | Guru

>l'unica soluzione è che uso di cicli e cursori in quanto con
>delle select secche non riesci a fare in modo semplice un mumero
>di insert pari al valore che hai nei campo ncomp!
>
>in pratica devi aggiungere alla stored una cosa del tipo:
>.........
>.........
>DECLARE @numRow int
>DECLARE ShiftCursorValue CURSOR FOR
>SELECT
>codalbero,codcomalb,data_elaborazione,stato,ncomp,codstato,codcomune
>FROM
>Archivio_mov
>OPEN ShiftCursorValue
>FETCH NEXT FROM ShiftCursorValue INTO @codalbero,@codcomalb,@data_elaborazione,@stato,@ncomp,@codstato,@codcomune
>WHILE @@FETCH_STATUS = 0
>BEGIN
>SET @numRow = @ncomp
>IF (@stato = 'A')
>EGIN
>WHILE @numRow <> 0
>BEGIN
>INSERT INTO #tblTemp
>(numRow,codalbero,codcomalb,data_Arrivo,data_Partenza,codstato,codcomune)
>VALUES
>(@numRow , @codalbero,@codcomalb,@data_elaborazione,null,@codstato,@codcomune)
>SET @numRow = @numRow - 1
>END
>END
>ELSE
>BEGIN
>WHILE @numRow <> 0
>BEGIN
>UPDATE
>#tblTemp
>SET data_Partenza = @data_elaborazione
>WHERE
>(codalbero = @codalbero AND
>codcomalb = @codcomalb AND
>data_Arrivo = @data_elaborazione ,
>data_Partenza is null AND
>codcomune = @codcomune AND
>numRow = @numRow)
>END
>SET @numRow = @numRow - 1
>END
>FETCH NEXT FROM ShiftCursorValue INTO @codalbero,@codcomalb,@data_elaborazione,@stato,@ncomp,@codstato,@codcomune
>END
>CLOSE ShiftCursorValue
>DEALLOCATE ShiftCursorValue
>.........
>.........
>poi la devi circondare con la dichiarazione della tabella temporane
>#tbmTemp, e con lesportazione in un file di testo di questa.


In che senso? puoi farmi un esempio?

senti solo una cosa, quando creo i file txt devo farlo in base ad un periodo ossia dalla data x alla data y usando un bettween sul campo data_elaborazione della tabella, dove posso inserirla?
>
>ps. . . lo so che è piena di errori, ma non l'ho provata!
>
>

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
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