Differenza fra queste due query?

mercoledì 21 febbraio 2007 - 14.51

escaflowne Profilo | Junior Member

Ciao,
scusatemi se in questi giorni sono insistente ma sto imparando

Dunque, mi spiegate che differenza c'è fra queste due query? Perchè io non ne vedo

declare @pValoreFiltro nvarchar(50) set @pValoreFiltro = '''%testo%'' and problema like ''%5%''' SELECT ID FROM tblTicket WHERE problema LIKE @pValoreFiltro ORDER by dataApertura desc print @pvaloreFiltro -----questo è il risultato del print ------- (0 row(s) affected) '%testo%' and problema like '%5%' ------------------------------------------------- SELECT ID FROM tblTicket WHERE problema LIKE '%testo%' and problema like '%5%' ORDER by dataApertura desc

in pratica se lancio la seconda query (la select secca) mi trova un id (come sperato) mentre se lancio la prima non ottengo nulla
Come mai? Dove sbaglio?
Grazie per la pazienza

amelix Profilo | Expert

>Ciao,
>scusatemi se in questi giorni sono insistente ma sto imparando
>
>
>Dunque, mi spiegate che differenza c'è fra queste due query?
>Perchè io non ne vedo
>
>declare @pValoreFiltro nvarchar(50)
>set @pValoreFiltro = '''%testo%'' and problema like ''%5%'''
>
>SELECT ID FROM tblTicket WHERE problema LIKE @pValoreFiltro
>ORDER by dataApertura desc
>
>print @pvaloreFiltro
>-----questo è il risultato del print -------
>(0 row(s) affected)
>'%testo%' and problema like '%5%'
>-------------------------------------------------
>
>SELECT ID FROM tblTicket WHERE problema LIKE '%testo%' and problema
>like '%5%'
>ORDER by dataApertura desc

Quindi, secondo te, se io x caso facessi questo:
set @pValoreFiltro = '''%testo%'' GO DELETE FROM tblTicket GO' ELECT ID FROM tblTicket WHERE problema LIKE @pValoreFiltro ORDER by dataApertura desc

Cosa dovrei ottenere?!?!?

OK?

Se proprio vuoi rischiare....
devi eseguire la qwery che ti 6 appena creato.
Andrea
http://www.MelisWeb.eu/

escaflowne Profilo | Junior Member

scusa la mia estrema ignoranza, potresti essere più esplicito?

amelix Profilo | Expert

La mia era una domanda che doveva farti pensare...
Cmq la tua prima qwery trova SOLO roba che nel campo problema trova quello che c'è in @pValoreFiltro
cioè, per esempio:
'jjjtestokkk' and problema like '154'
'testo' and problema like '5'

ma non troverà MAI queste righe:
Problema nr 15
Problema delle 5 mele

OK?
Andrea
http://www.MelisWeb.eu/

escaflowne Profilo | Junior Member

Infatti ci sto riflettendo


MODIFICA messaggio:
azz, ora ho capito il tuo ultimo post. In realtà, quindi, non sto cercando con i parametri like ma ESATTAMENTE un like di un testo fatto così= ddfdfdtestosdfdsfs' and problema like '5'
Giusto?

azz

Quindi, in pratica, non è una soluzione percorribile, l'unica è costruire la query e lanciarla ma così non vado incontro a problemi di sicurezza?
Io speravo di caricare i parametri di input e fare una executeCommand da asp (classico)
In pratica dovrei creare la query tipo:
stringSQL = "select id from tblticket where problema like '%testo%' and problema like '%5%'"
objRS.open stringSQL, conn

Altra possibliità?

amelix Profilo | Expert

Mmhhhh....
Io ho fatto una cosa simile.... Ma non ho usato una stored procedure per il tuo stesso motivo.... a priori non sapevo quante parole avrei dovuto cercare...

Quindi da codice splitto x spazio e po mi costruisco la qwery con i vari parametri (@par1, @par2, @par3 etc...) e i vari like.

In questo forum troverai sicuramente qualche guru che ti/ci darà una soluzione (Spero! ) MsSql oriented!
Andrea
http://www.MelisWeb.eu/

escaflowne Profilo | Junior Member

Ti ringrazio per la discussione costruttiva.
Adesso, magari, aspetto lbraglia

Tutto nasce dal fatto che in sql server express non è presente il full-text (d'altra parte è gratis quindi a qualcosa si dovrà pur rinunciare)

Spero che qualcuno abbia già affrontato il problema

escaflowne Profilo | Junior Member

>Mmhhhh....
>Io ho fatto una cosa simile.... Ma non ho usato una stored procedure
>per il tuo stesso motivo.... a priori non sapevo quante parole
>avrei dovuto cercare...
>
>Quindi da codice splitto x spazio e po mi costruisco la qwery
>con i vari parametri (@par1, @par2, @par3 etc...) e i vari like.
>
>In questo forum troverai sicuramente qualche guru che ti/ci darà
>una soluzione (Spero! ) MsSql oriented!
>Andrea
>http://www.MelisWeb.eu/

stavo pensando....
e se passassi una stringa con un certo marcatore (ad es. ogni parola da cercare separata da #) e poi, all'interno di sql mi creassi tante var quante sono le parole (o mi creassi un array e poi ciclassi fra i suoi componenti per costruirmi la query)? A quel punto potrei costruire la select sapendo esattamente quante parole sono

lbenaglia Profilo | Guru

>Adesso, magari, aspetto lbraglia
E chi sarebbe questo "animale"? ROTFL

>Spero che qualcuno abbia già affrontato il problema
Itzik
Leggi questo post:
http://groups.google.it/group/microsoft.public.it.sql/msg/8031c15286139694

Mi raccomando, se osi ancora storpiare il mio nome sarà l'ultimo aiuto che riceverai!!!

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

amelix Profilo | Expert

Io ho ancora un errore da bruciarmi x invocarti!!!
BENE!
Andrea
http://www.MelisWeb.eu/

escaflowne Profilo | Junior Member


hmmm
ecco....
io......
ehm.....
vabbè, mi hai scoperto
mea culpa

per farmi perdonare mi sono messo a ginocchioni sui ceci, va bene?
(ps i ceci sono cotti però )


grazie per il link, gli vado a dare un'occhiata subito

escaflowne Profilo | Junior Member

Ciao,
sono di nuovo qui, ho pensato un po' a come risolvere il problema e, per ora, ho pensato a questa soluzione, non è bellissima ma mi funziona.
In pratica effettua una ricerca con AND fra le parole cercate. L'unica accortezza è passare le parole da cercare separate dalla virgola.

Utilizzo due tabelle temporanee, ciclo per il numero di parole da cercare e, se è la prima volta, carico tutte le righe contenenti quella parola (la prima) nella prima tabella temporanea, prelevandole dalla tabella originale (tblTicket), nei passaggi successivi filtro la tabella temporanea in funzione della seconda parola e passo tutto il contenuto nella seconda tabella temporanea (che prima svuoto), quindi rifaccio lo stesso con la terza parola ecc.
Posto un po' di codice, spero possa essere utile o che mi vengano evidenziati gli errori o i (netti) miglioramenti che di sicuro ci saranno

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Nella tabella temporanea #tmpSearch2 ho l'elenco delle righe che hanno SIA la prima parola SIA la seconda ecc.

amelix Profilo | Expert

Bello!
Ma, secondo me, un po complicato...

Non ti conviene costruire il costrutto WHERE aggiungendo una ad una le clausole di AND (se ne hai bisogno) e poi executare il risultato finale?

Dovrebbe avere dei tempi di esecuzione e utilizzo di risorse estremamente minori.
Andrea
http://www.MelisWeb.eu/

escaflowne Profilo | Junior Member

vero
La verità è che mi sono fatto prendere la mano e, quando mi sono accorto che non era un metodo molto efficiente, ormai ero arrivato ad un punto avanzato quindi ho voluto finire.
Ora provo come mi hai suggerito tu

amelix Profilo | Expert

Cmq la tua idea mi ha "risolto" un mio problema...
Mi ha fatto pensare che la mega-giga-qwery che fa tutto non esiste e, a piccoli passi, si può trovare il risultato!

Grazie!
Andrea
http://www.MelisWeb.eu/

escaflowne Profilo | Junior Member

lo credo anche io, o comunque, al mio attuale livello di preparazione credo che la soluzione che tu hai prospettato (unica grossa query) non sia percorribile.
Il bello di questo campo è che ci sono diversi modi per giungere allo stesso risultato, poi è l'analisi di efficienza e dei costi-benefici a privilegiare una piuttosto che l'altra e, comunque, col tempo si (dovrebbe) migliora sempre di più.

Ben vengano i forum come questi con gente moooolto preparata e paziente che sa sempre spiegarti il perchè di una soluzione
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