Exec di una stringa

venerdì 12 settembre 2014 - 12.14

memmo77 Profilo | Expert

Salve a tutti, sto per chiedere un'eresia
Ho una select "costruita" in una stringa di cui ci faccio un execute. Fin qui tutti ok, ora mi trovo nel caso in cui, una campo che vado a selezionare nella select, dovrebbe diventare parte dell'exec.
Cerco di spiegarmi meglio:

SET @FORMULA ='
SELECT
CASE campo WHEN 2 THEN
CASE WHEN '+ @FORMULA_APPO +' THEN
print(operazione1)
END
ELSE print(operazione2)
END AS mio_campo
,FORMULA'

Dove in pratica @FORMULA_APPO = FORMULA
Questo è un'estratto di tutta la select ovviamente, spero serva a far capire cosa chiedo

Grazie!

alx_81 Profilo | Guru

>Salve a tutti, sto per chiedere un'eresia
ciao

>Ho una select "costruita" in una stringa di cui ci faccio un
>execute. Fin qui tutti ok, ora mi trovo nel caso in cui, una
>campo che vado a selezionare nella select, dovrebbe diventare
>parte dell'exec.
non è un'eresia, ma è una cosa mooolto pericolosa, a causa della possibilità di un sql injection (per maggiori dettagli, leggi qui: http://www.dotnethell.it/articles/SQL-Injection-Tutorial-Security.aspx)

>Dove in pratica @FORMULA_APPO = FORMULA
>Questo è un'estratto di tutta la select ovviamente, spero serva
>a far capire cosa chiedo
o lavori sulla stringa prima andando a fare concatenazione di stringhe, oppure usi la sp_executeSQL (http://msdn.microsoft.com/it-it/library/ms188001.aspx) passandole il parametro necessario.

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

memmo77 Profilo | Expert

Grazie della tempestiva risposta, nel caso della mia parte di select scritta sopra, come andrebbe riscritta? Sto provando ma non mi è chiaro
Grazie

alx_81 Profilo | Guru

>Grazie della tempestiva risposta, nel caso della mia parte di
>select scritta sopra, come andrebbe riscritta? Sto provando ma
>non mi è chiaro
dipende quale delle due soluzioni vuoi seguire tra quelle che ti ho proposto.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

memmo77 Profilo | Expert

Vorrei usare la sp_executeSQL Mi sono informato sulla sicurezza e mi dicono che posso usarla

alx_81 Profilo | Guru

>Vorrei usare la sp_executeSQL Mi sono informato sulla sicurezza
>e mi dicono che posso usarla
ok, cerca di mandarmi un esempio preciso di quanto vuoi fare
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

memmo77 Profilo | Expert

Ciao e buongiorno, un esempio potrebbe essere questo:

execute('
SELECT
CAMPO
,CAMPO_1
,CAMPO_2
,CASE CAMPO WHEN 1 THEN
CASE WHEN @FORMULA THEN --QUI VA INSERITA LA "FORMULA"
IMPORTO / 1000
END
ELSE NEW_IMPORTO
END AS NEW_IMPORTO
,@FORMULA = CAMPO_2
,IMPORTO
FROM
TABLE_1
')

--DOVE CAMPO_2 RESTITUISCE UNA STRINGA DEL TIPO (CAMPO = 1 AND CAMPO_1 = 2)

In pratica il campo CAMPO_2 dovrebbe costiture parte integrante dell'exec.
Spero di essermi spiegato.
Grazie mille!

alx_81 Profilo | Guru

In quel caso dovrai allora usare la EXEC, la sp_executeSQL sarebbe superflua, poichè nella stringa che gli passi dovresti fare una EXEC..
Quindi meglio solo la EXEC.
Cosa non riesci a fare concatenando stringhe? Una volta fatta la concatenazione basta passare la stringa alla funzione EXEC.
Dove ti blocchi?
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5