Buongirono, vorrei costruire una sp con diversi filtri, ma uno un particolare prende il costrutto della query dinamicamente. Forse con un esempio rendo meglio l'idea
SELECT * FROM dbo.CLI WHERE(CLI_CODICE LIKE'%'+@valRicerca+'%')AND(CLI_CODICE_CA LIKE'%D%'OR CLI_CODICE_CA LIKE'%L%'OR CLI_CODICE_CA LIKE'%U%'OR CLI_CODICE_CA ='FAR')AND(CLI_CODICE_SE <> N'002'OR CLI_CODICE_SE IS NULL)
AND(CLI_CODICE_AC ='RM'OR CLI_CODICE_AC ='RM1'OR CLI_CODICE_AC ='RM2'OR CLI_CODICE_AC ='RM3'OR CLI_CODICE_AC ='RM4'OR CLI_CODICE_AC ='RM5'OR CLI_CODICE_AC ='LT'OR CLI_CODICE_AC ='FR') eccetera, eccetera
Questo ultimo testo è quello che cambia a seconda dell'utente che usa la SP. Le varianti sono circa 60, trattandosi di provincie italiane (vedi filtroArea più sotto)
Attualmente da una pagina asp richiamo una SELECT con WHERE &sWhere, dove sWhere è strutturata con CASE CODICE UTENTE creandomi alla fine la query corretta del tipo
Case "037"
filtroArea = "(CLI_CODICE_AC ='MI'OR CLI_CODICE_AC ='PC'OR CLI_CODICE_AC ='PV')"
sWhere = "(CLI_CODICE LIKE'"&"%"&valRicerca&"%"&"') AND (dbo.CLI.CLI_CODICE_CA LIKE N'%D%' OR dbo.CLI.CLI_CODICE_CA LIKE N'%L%' OR dbo.CLI.CLI_CODICE_CA LIKE N'%U%' OR dbo.CLI.CLI_CODICE_CA = N'FAR') AND ("&filtroArea&")
Ho provato ad utilizzare la stessa struttura dentro la SP ma sia con CASE (non funziona x niente) che con IF ELSE, ma si blocca per errore di 128 caratteri; ho pensato di passare tutto filtroArea come parametro, ma mi restituisce specificata espressione di tipo non booleano
in un contesto in cui prevista una condizione.
Sono 5 ore che giro in tondo ma non trovo una soluzione.
Ma si può fare?
E come consiglio?
Grazie
Gianluca Zeri