Discussione:
Query parametrica
(troppo vecchio per rispondere)
aspr75
2008-05-30 10:50:55 UTC
Permalink
Buongiorno a tutti,
dovrei realizzare una query parametrica su SQLSERVER. IL parametro da
passare in INPUT alla query è proprio il nome della tabella .
COn istruzioni per il controllo del flusso, riesco a valorizzare una
stringa, di volta in volta, con il nome della tabella che voglio
interrogare ma il problema è che quando provo ad eseguire una SELECT
(*) from ....(e al posto del nome tabella passo la stringa che lo
contiene) il sistema mi da errore.
Spero di essere stata abbastanza chiara.
Potete aiutarmi ? grazie mille
Luca Bovo
2008-05-30 11:02:40 UTC
Permalink
Post by aspr75
Buongiorno a tutti,
dovrei realizzare una query parametrica su SQLSERVER. IL parametro da
passare in INPUT alla query è proprio il nome della tabella .
COn istruzioni per il controllo del flusso, riesco a valorizzare una
stringa, di volta in volta, con il nome della tabella che voglio
interrogare ma il problema è che quando provo ad eseguire una SELECT
(*) from ....(e al posto del nome tabella passo la stringa che lo
contiene) il sistema mi da errore.
Ciao,
per poter fare quello che ti serve devi necessariamente utilizzare il
cosiddetto SQL dinamico:

DECLARE @s varchar(250)
SET @s = 'SELECT * FROM ' + @ParametroTuaTabella

EXEC(@s)

Sappi però che l'utilizzo del SQL dinamico presta il fianco a tutta una
serie di problemi di sicurezza e di performance.
Post by aspr75
Spero di essere stata abbastanza chiara.
Potete aiutarmi ? grazie mille
Prego

Luca Bovo
http://blogs.dotnethell.it/luca/
tiriamoavanti
2008-05-30 11:03:11 UTC
Permalink
Post by aspr75
dovrei realizzare una query parametrica su SQLSERVER. IL parametro da
passare in INPUT alla query è proprio il nome della tabella .
non è possibile
o meglio non puoi farlo così, direttamente
ed è pure sconsigliato

se proprio, ma proprio proprio vuoi comunque farlo devi preparare un'unica
stringona con tutto l'intero comando select e chiamare una sp di sistema
"sp_executesql"
Si chiama sql dinamico ed in rete trovi milioni di milioni di riferimenti
Ruggiero Lauria
2008-05-30 11:49:58 UTC
Permalink
Create PROCEDURE dbo.Query_dinamica

@Tabella varchar(255)

AS

BEGIN

DECLARE @SQL nVARCHAR(4000)


SET @SQL =N'SELECT * FROM ' + @Tabella



EXECUTE sp_executesql @SQL

END



e poi:

exec dbo.query_dinamica 'nome_tabella'
--
_________________________
Ruggiero Lauria

MCSA-MCSE-MS SQL DBA
Post by tiriamoavanti
Post by aspr75
dovrei realizzare una query parametrica su SQLSERVER. IL parametro da
passare in INPUT alla query è proprio il nome della tabella .
non è possibile
o meglio non puoi farlo così, direttamente
ed è pure sconsigliato
se proprio, ma proprio proprio vuoi comunque farlo devi preparare un'unica
stringona con tutto l'intero comando select e chiamare una sp di sistema
"sp_executesql"
Si chiama sql dinamico ed in rete trovi milioni di milioni di riferimenti
Andrea Montanari
2008-05-30 12:26:52 UTC
Permalink
salve,
Post by Ruggiero Lauria
Create PROCEDURE dbo.Query_dinamica
@Tabella varchar(255)
AS
BEGIN
END
exec dbo.query_dinamica 'nome_tabella'
e anche

exec dbo.query_dinamica 'nome_tabella; DROP TABLE [altraTabella]; DROP
DATABASE [xx]; etc..'
come vedi, tutto rientra nei 250 caratteri, all'interno della procedura e'
realmente difficile verificare non siano state passate delle "porcherie" e
questo e' il motivo per cui, come indicato da tiriamoavanti, questa
metodologia non e' affatto ben vista..
saluti
--
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz http://www.hotelsole.com
DbaMgr2k ver 0.21.1 - DbaMgr ver 0.65.1 and further SQL Tools
--------- remove DMO to reply
Loading...