>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