SP con aggiornamento

sabato 17 giugno 2006 - 19.01

ricky Profilo | Junior Member

Ciao, per quale motivo questa SP non effettua nessun aggiornamento


ALTER PROCEDURE [dbo].[Aggiungi]
(
@Segno varchar(1),
@Qta int,
@ID int
)

AS

...

UPDATE Tabella
SET Qta = Qta+@Segno*@Qta
WHERE ID = @ID


exec Aggiungi '+',5,645,1

Non effettua nessun aggiornamento, anche se esiste un record con ID 645

lbenaglia Profilo | Guru

>ALTER PROCEDURE [dbo].[Aggiungi](
>@Segno varchar(1),
>@Qta int,
>@ID int
>)

>exec Aggiungi '+',5,645,1
>
>Non effettua nessun aggiornamento, anche se esiste un record
>con ID 645

Scusa, hai 3 parametri di input e tu ne passi 4?
Inoltre il comando:

UPDATE Tabella SET Qta = Qta + @Segno * @Qta WHERE ID = @ID

non funzionerà mai se con @Segno ti limiterai a passare le stringhe '+' e '-'.
Guarda:

SELECT '+' * 5 AS Prodotto; GO /* Output: Prodotto ----------- 0 (1 row(s) affected) */

Le stringhe '+' e '-' sono implicitamente castate a 0. Guarda che succede se eseguo un cast esplicito a int:

SELECT CAST('+' AS int) AS Col1, CAST('-' AS int) AS Col2; GO /* Output: Col1 Col2 ----------- ----------- 0 0 (1 row(s) affected) */

Puoi facilmente risolvere il problema definendo il parametro @Segno come int, valorizzandolo con +1 e -1:

USE tempdb; GO CREATE TABLE dbo.Tabella( [ID] int NOT NULL PRIMARY KEY, Qta int NOT NULL ); GO INSERT dbo.Tabella VALUES(645, 10); GO CREATE PROCEDURE dbo.Aggiungi( @Segno int, @Qta int, @ID int ) AS UPDATE dbo.Tabella SET Qta = Qta + @Segno * @Qta WHERE ID = @ID; GO EXEC dbo.Aggiungi 1, 5, 645; GO SELECT * FROM dbo.Tabella; GO /* Output ID Qta ----------- ----------- 645 15 (1 row(s) affected) */ EXEC dbo.Aggiungi -1, 5, 645; GO SELECT * FROM dbo.Tabella; GO /* Output ID Qta ----------- ----------- 645 10 (1 row(s) affected) */ DROP PROCEDURE dbo.Aggiungi; DROP TABLE dbo.Tabella;

Ciao!

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

ricky Profilo | Junior Member

Ora è chiarissimo!!

Grazie
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