Leggere Aggiornare e Reinserire

mercoledì 21 febbraio 2007 - 14.11

melmar20 Profilo | Junior Member

Ciao a tutti vi spiego cosa vorrei fare....

ho una tabella con un solo campo intero , ogni volta che la chiamo vorrei che lei leggesse l'ultimo valore presente , sommasse un intero che io gli passo e inserisse il tutto in un nuovo record della stessa tabella....

Come potri fare?

ho pensato di utilizzare un DataTable ma la procedura diventa un pò complicata...

Come Database sto utilizzando Microsoft SQL Server 2005

amelix Profilo | Expert

Come fai a sapere qual'è l'ultimo record?
Oltre al campo intero che cosa hai?

Andrea
http://www.MelisWeb.eu/

alx_81 Profilo | Guru

>Ciao a tutti vi spiego cosa vorrei fare....
Ciao!

>
>ho una tabella con un solo campo intero , ogni volta che la
>chiamo vorrei che lei leggesse l'ultimo valore presente , sommasse
>un intero che io gli passo e inserisse il tutto in un nuovo record
>della stessa tabella....
>
>Come potri fare?
>
In relazione al post che abbiamo seguito prima, http://www.dotnethell.it/forum/messages.aspx?ThreadID=13927. quello sulla funzione, puoi farne una simile, alla quale passi il valore intero da sommare, e al posto della ISNULL(MAX(contatoreclick),0) + 1 metti ISNULL(MAX(contatoreclick),0) + @ParametroIntero..
ed il gioco è fatto..
poi riscrivi una stored procedure che fa la stessa cosa di quella dell'altro post ma che utilizza la nuova funzione..
che ne dici?
Alx81 =)

http://blogs.dotnethell.it/suxstellino

lbenaglia Profilo | Guru

>ho una tabella con un solo campo intero , ogni volta che la
>chiamo vorrei che lei leggesse l'ultimo valore presente , sommasse
>un intero che io gli passo e inserisse il tutto in un nuovo record
>della stessa tabella....
>
>Come potri fare?

Ciao melmar20,

Che domanda originale
Non ho idea a cosa ti possa servire una cosa del genere, ma proverò ugualmente a fornirti la mia versione della risposta:

USE tempdb; CREATE TABLE dbo.myValues( ValueID int NOT NULL IDENTITY PRIMARY KEY, [Value] int NOT NULL ); GO CREATE PROCEDURE dbo.up_AddValue( @Value int = 0 ) AS WITH CTE_MaxValue AS ( SELECT COALESCE(MAX([Value]), 0) AS MaxValue FROM dbo.myValues ) INSERT dbo.myValues SELECT MaxValue + @Value FROM CTE_MaxValue; GO EXEC dbo.up_AddValue 5; EXEC dbo.up_AddValue 2; EXEC dbo.up_AddValue 4; SELECT * FROM dbo.myValues; /* Output: ValueID Value ----------- ----------- 1 5 2 7 3 11 (3 row(s) affected) */ DROP PROCEDURE dbo.up_AddValue; DROP TABLE dbo.myValues;

Come puoi notare la stored procedure dbo.up_AddValue utilizza una Common Table Expression per ricavare il massimo valore presente in tabella che verrà sommato al valore del parametro in ingresso ed inserito nuovamente in tabella.

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

melmar20 Profilo | Junior Member

in relazione a quello che abbiamo fatto nel Thread( http://www.dotnethell.it/forum/messages.aspx?ThreadID=13927.)precedente e a ciò ceh mi hai consigliato in questo Post io ho scritto questo:

CREATE FUNCTION IncrementoMaxMail() RETURNS int AS BEGIN DECLARE @MaxVal int SELECT @MaxVal = ISNULL(MAX(ContatoreMail),0) + 1 FROM NumEmail RETURN @MaxVal END GO CREATE PROCEDURE InserisciMail @NumeroMail int AS BEGIN -- inserisco ricavando il dato dalla funzione INSERT INTO NumEmail (ContatoreMail) SELECT IncrementoMaxMail() + @NumeroMail END GO

questo perchè io dal codice Vb richiamavo la procedura e poi questa richiamava la funzione....
adesso però con il codice scritto sopra mi segnala un errore proprio nell'istruzione
SELECT YourCompany_IncrementoMaxMail() + @NumeroMail

ho fatto in questo modo perchè volevo fare come abbiamo fatto prima cioè con una sola chiamata incrementare e inserire nel Database

alx_81 Profilo | Guru

>in relazione a quello che abbiamo fatto nel Thread( http://www.dotnethell.it/forum/messages.aspx?ThreadID=13927.)precedente
>e a ciò ceh mi hai consigliato in questo Post io ho scritto questo:
>
>
>
>CREATE FUNCTION IncrementoMaxMail()
>RETURNS int
>AS
>BEGIN
>
> DECLARE @MaxVal int
>
>SELECT @MaxVal = ISNULL(MAX(ContatoreMail),0) + 1 FROM NumEmail
>
> RETURN @MaxVal
>
>END
>
>GO
>
>CREATE PROCEDURE InserisciMail
>
>@NumeroMail int
>
>AS
>BEGIN
>
> -- inserisco ricavando il dato dalla funzione
> INSERT INTO NumEmail (ContatoreMail)
> SELECT IncrementoMaxMail() + @NumeroMail
>
>END
>
>GO
>
>
>
>questo perchè io dal codice Vb richiamavo la procedura e poi
>questa richiamava la funzione....
>adesso però con il codice scritto sopra mi segnala un errore
>proprio nell'istruzione
>SELECT IncrementoMaxMail() + @NumeroMail
>
>ho fatto in questo modo perchè volevo fare come abbiamo fatto
>prima cioè con una sola chiamata incrementare e inserire nel
>Database

scrivi:
SELECT dbo.IncrementoMaxMail() + @NumeroMail

Alx81 =)

http://blogs.dotnethell.it/suxstellino

melmar20 Profilo | Junior Member

ho modificato un pò di cose perchè quello che voglio fare non è esattamente quello che ho fatto nel Thread precedente,nel thread precedente volevo incrementare soltanto di una unita mentre qui vorrei incrementare di un numero variabile,che ricevo in ingresso

questo è il codice

CREATE FUNCTION ncrementoMaxMail(@NumeroMail int) RETURNS int AS BEGIN DECLARE @MaxVal int SELECT @MaxVal = ISNULL(MAX(ContatoreMail),0) + @NumeroMail FROM NumEmail RETURN @MaxVal END GO create procedure InserisciMail @NumeroMail int AS BEGIN -- inserisco ricavando il dato dalla funzione INSERT INTO NumEmail (ContatoreMail) SELECT IncrementoMaxMail(NumeroMail) END GO

ma comunque mi viene segnalato un errore sintattico che non riesco a capire a cosa sia dovuto...
precisamente mi si dice che l'errore è nella seconda procedura

alx_81 Profilo | Guru

>ho modificato un pò di cose perchè quello che voglio fare non
>è esattamente quello che ho fatto nel Thread precedente,nel thread
>precedente volevo incrementare soltanto di una unita mentre qui
>vorrei incrementare di un numero variabile,che ricevo in ingresso
>
>questo è il codice
>
>
>
>CREATE FUNCTION ncrementoMaxMail(@NumeroMail int)
>RETURNS int
>AS
>BEGIN
>
> DECLARE @MaxVal int
>
>SELECT @MaxVal = ISNULL(MAX(ContatoreMail),0) + @NumeroMail FROM
>NumEmail
>
> RETURN @MaxVal
>
>END
>
>GO
>
>create procedure InserisciMail
>
>@NumeroMail int
>
>AS
>BEGIN
>
> -- inserisco ricavando il dato dalla funzione
> INSERT INTO NumEmail (ContatoreMail)
> SELECT IncrementoMaxMail(NumeroMail)
>
>END
>
>GO
>
>
>
>ma comunque mi viene segnalato un errore sintattico che non riesco
>a capire a cosa sia dovuto...
>precisamente mi si dice che l'errore è nella seconda procedura

Come ti ripeto, metti "dbo." davanti a "IncrementoMaxMail(@NumeroMail)".. e aggiungi la chiocciola davanti a NumeroMail
comincio a sospettare che tu non legga con attenzione i miei post

la sintassi corretta è:
CREATE FUNCTION IncrementoMaxMail(@NumeroMail int) RETURNS int AS BEGIN DECLARE @MaxVal int SELECT @MaxVal = ISNULL(MAX(ContatoreMail),0) + @NumeroMail FROM NumEmail RETURN @MaxVal END GO create procedure InserisciMail @NumeroMail int AS BEGIN -- inserisco ricavando il dato dalla funzione INSERT INTO NumEmail (ContatoreMail) SELECT dbo.IncrementoMaxMail(@NumeroMail) END GO
Alx81 =)

http://blogs.dotnethell.it/suxstellino

melmar20 Profilo | Junior Member

grazie ancora!!!!!
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