SQL Server ed ALM su database


Il blog di Alessandro Alpi
Home Blogs | Home | Login | Contact | My Profile | RSS | About | Cerca

Filtro dinamico senza Dynamic SQL

A volte può capitare di dover scrivere applicazioni che diano all'utente finale la possibilità di eseguire ricerche sempre più approfondite e dettagliate.Molto spesso il cliente ha bisogno di filtrare quasi per intero i dati inseriti in una tabella.Ad esempio, pensando ad una biblioteca, potremmo voler filtrare l'anagrafica dei libri sia per titolo, che per autore, che per categoria, che per tanti altre informazioni disponibili.Sia lato applicazione, sia lato database, risulta scomodo gestire co 
Leggi tutto il post...
Categoria: Transact-SQL
domenica, 05 nov 2006 Ore. 21.28

Scrivi un commento

Nome:
Blog:
E-Mail:
(l'indirizzo e-mail non verrà pubblicato, consente di essere avvertiti quando arrivano nuovi commenti a questo Post)
Codice:
Corpo:
Cookie:

Commenti

Autore: Sandro BizioliInviato il: 05 nov 2006 - 22.07
Attenzione che in un esmpio come il tuo non hai considerato le ricerche su parti di campo.
Ad esempio se non sapessi il titolo completo 'SQL Server for dummies', ma solo 'SQL Server' la tua procedura non restituirebbe nessun valore.
Ho implementato anche io e tutt'ora uso un gestore "dinamico" per le query sql (ove possibile), ma sfutto l'operatore LIKE e non = che è troppo restrittivo:

if @Name is null
begin
select @Name = '%'
end

...
...

E nella clausola Where:
where Name like @Name
Autore: LorenzoInviato il: 05 nov 2006 - 23.08
Ciao Alessandro,

attenzione, il piano di esecuzione ottenuto utilizzando quella tecnica è di gran lunga peggiore rispetto a quello ottenuto utilizzando in modo appropriato il Dynamic SQL.
A titolo di esempio ti suggerisco di leggere la soluzione adottata dal SQL Server MVP Itzik Ben-Gan che ho riportato nel seguente post:
http://groups.google.it/group/microsoft.public.it.sql/msg/8031c15286139694

Ciao!
Autore: Alessandro AlpiInviato il: 06 nov 2006 - 09.19
La scelta degli operatori, ovviamente, varia in base all'esigenza del filtro, quindi ho utilizzato l'uguaglianza per introdurre l'esempio..

Per quanto riguarda il piano d'esecuzione, col motore di SQL Server 2005 mi viene restituito lo stesso sia per la soluzione proposta sia per quella basata sulla where precisa.. Cmq sia, evidentemente, non sempre è così. Quindi ringrazio Lorenzo per il link inviatomi. Edito il contenuto del post
Autore: LorenzoInviato il: 06 nov 2006 - 14.58
> viene restituito lo stesso sia per la soluzione proposta sia per quella basata sulla where precisa
Ciao Alessandro, per vedere le differenze analizza il piano di esecuzione generato dalle due tecniche su una tabella con milioni di righe opportunamente indicizzata...
Autore: Alessandro AlpiInviato il: 07 nov 2006 - 11.16
fatto.. ed in effetti ci perde.. ho corretto il post con il successivo.
grazie mille Lorenzo.
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003