4 messaggi dal 15 luglio 2004
salve,

vorrei parametrizzare il nome della tabella di questa stored procedure:
CREATE PROCEDURE Aggiorna_SOSTE_CL(@NomeTabella varchar, @Tipo varchar, @FlagParcheggio bit, @SostaChiusa bit, @DataFine datetime, @Durata float, @IdGPS int)
/*
AGGIORNA LO STATO DELLE SOSTE
*/
AS
if @Tipo='1'
begin
UPDATE @NomeTabella SET FlagParcheggio=@FlagParcheggio,
SostaChiusa=@SostaChiusa, DataFine=@DataFine, Durata=@Durata WHERE IdGPS= @IdGPS
end
if @Tipo='2'
begin
UPDATE @NomeTabella SET DataFine=@DataFine, Durata=@Durata, SostaChiusa=@SostaChiusa WHERE IdGPS= @IdGPS
end
if @Tipo='3'
begin
UPDATE @NomeTabella SET DataFine=@DataFine, Durata=@Durata, FlagParcheggio=@FlagParcheggio WHERE IdGPS= @IdGPS
end
GO


il nome della tabella si trova nella variabile @NomeTabella

mi da' il seguente errore: dichiarare la variabile @NomeTabella
come mai ?
grazie per l'aiuto
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
donfiore wrote:
salve,

vorrei parametrizzare il nome della tabella di questa stored procedure: CREATE PROCEDURE Aggiorna_SOSTE_CL(@NomeTabella varchar, @Tipo varchar, @FlagParcheggio bit, @SostaChiusa bit, @DataFine datetime, @Durata float, @IdGPS int)
/*
AGGIORNA LO STATO DELLE SOSTE
*/
AS
if @Tipo='1'
begin
UPDATE @NomeTabella SET FlagParcheggio=@FlagParcheggio,
SostaChiusa=@SostaChiusa, DataFine=@DataFine, Durata=@Durata WHERE IdGPS= @IdGPS
end
if @Tipo='2'
begin
UPDATE @NomeTabella SET DataFine=@DataFine, Durata=@Durata, SostaChiusa=@SostaChiusa WHERE IdGPS= @IdGPS
end
if @Tipo='3'
begin
UPDATE @NomeTabella SET DataFine=@DataFine, Durata=@Durata, FlagParcheggio=@FlagParcheggio WHERE IdGPS= @IdGPS
end
GO

il nome della tabella si trova nella variabile @NomeTabella
mi da' il seguente errore: dichiarare la variabile @NomeTabella come mai ?
grazie per l'aiuto

non e' possibile "parametrizzare" i comandi DML (e anche DDL) in questo senso.. i nomi degli oggetti coinvolti devono essere delle costanti.. diversamente, e' solo possibile passare per codice SQL dinamico, dove si costruisce a runtime il comando da eseguire, per poi appunto eseguirlo tramite EXEC, tipo
DECLARE @cmd varchar(n);
SET @cmd = 'SELECT ' + @nomeColonna + ' FROM ' + @nomeTabella; EXEC (@cmd);

non e' una bellissima cosa da fare sia in termini di funzionalita' che di sicurezza, in quanto apre le porte ad attacchi di SQL injection di notevole portata..
leggiti comunque sull'argomento il bell'articolo di Erland Sommarskog, SQL Server MVP, presso http://www.sommarskog.se/dynamic_sql.html saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.