Errore in utilizzo variabile in select

giovedì 03 luglio 2008 - 09.54

stena Profilo | Junior Member

Ho una funzione, dove il filtro di selezione cambia in base ai parametri passati, poichè alcune volte qualche parametro potrebbe essere null e quindi
non inserito nel filtro.
Utilizzo una variabile @where per creare il filtro corrispondente, solo che all'atto dell'esecuzione mi viene segnalato l'errore sotto riportato.

Esempio:
declare @where varchar(MAX)
set @where = ' where (a=1) and (b=2) and (c=3)'

select * from tabella + @where

Errore segnalato:
Conversione non riuscita durante la conversione del valore varchar ' where (a=1) and (b=2) and (c=3)' nel tipo di dati int.

grazie per eventuali consigli.

lbenaglia Profilo | Guru

>Ho una funzione, dove il filtro di selezione cambia in base ai
>parametri passati, poichè alcune volte qualche parametro potrebbe
>essere null e quindi
>non inserito nel filtro.

Ciao Stefano,

che DBMS utilizzi?

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

stena Profilo | Junior Member

Utilizzo Sql Server 2005.

ciao e grazie

lbenaglia Profilo | Guru

>Utilizzo Sql Server 2005.
In SQL Server non è possibile concatenare in questo modo literal e variabili ma occorre costruire l'intero comando SQL ed eseguirlo tramite EXEC oppure sp_executesql.
Ad ogni modo entrambe le tecniche sono sconsigliate dato che oltre a causare problemi di performance, aprono la strada ad attacchi di tipo SQL Injection.
Leggi attentamente questo articolo di Erland:
http://www.sommarskog.se/dynamic_sql.html

Una possibile soluzione potrebbe essere quella proposta da Itzik che fa uso di SQL Dinamico ma con tutti i controlli del caso oppure quella ancora più elegante basata su UDF Table Valued proposta da Marcello:
http://groups.google.it/group/microsoft.public.it.sql/browse_thread/thread/59359884f3bc01d8/

>ciao e grazie
Prego.

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

stena Profilo | Junior Member

ok, ora do un'occhiata ai vari post che mi hai segnalato.
Il problema nasceva dal fatto che la funzione ha 4 parametri in ingresso e talvolta qualcuno può essere null; e cercavo un metodo per non dover duplicare codice.

ciao e grazie ancora.

lbenaglia Profilo | Guru

>Il problema nasceva dal fatto che la funzione ha 4 parametri
>in ingresso e talvolta qualcuno può essere null; e cercavo un
>metodo per non dover duplicare codice.
Nel thread segnalato troverai la soluzione al problema

>ciao e grazie ancora.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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