Query Select con operatore LIKE su Dataset

sabato 27 dicembre 2014 - 15.09

jekisi Profilo | Senior Member

Salve a tutto il forum, avrei il seguente problema:

Per quanto riguarda Vb.Net e i database di Access, per fare una query di select usando l' operatore LIKE sul Dataset scrivo:

SELECT Codice, Descrizione, Unitàmisura, CodiceIva, AliquotaIva, Prezzo
FROM Articoli
WHERE (Codice LIKE ? & '%')

Per quanto riguarda i database di Sql, mi sa che cambia qualcosa sulla WHERE.

Se ad esempio scrivo:

WHERE (Codice = ?)

il generatore di query mi imposta:

WHERE (Codice = @Param2)

Quindi mi chiedo:

Guardando la query per il db di Access, per far uso di LIKE, in Sql come dovrebbe cambiare?

Distinti Saluti

Fabio Messina

renarig Profilo | Expert

>WHERE (Codice LIKE ? & '%')
> .......
>Guardando la query per il db di Access, per far uso di LIKE,
>in Sql come dovrebbe cambiare?

Non mi è chiaro quello che vuoi ottenere ( magari sono io a non capire )

quella WHERE è di Access dove il ? è un carattere speciale che indica un ( uno solo ) carattere o cifra in quella posizione

invece '%' è un carattere speciale di SQLServer che indica più o meno la stessa cosa a SQLServer
( in questo momento mi sfugge se sia uno solo o più caratteri )

il LIKE presuppone l'uso di apici cosi: LIKE 'tuoi criteri'


spiegaci con le parole il tipo di criterio che vuoi usare per filtrare

.

jekisi Profilo | Senior Member

Se per dire scrivo 1, devo cercare tutti quei codici che incominciano con 1, se scrivo A, devo cercare su un codesto campo descritto nella query, tutti quei record che incominciano con A.

renarig Profilo | Expert

>Se per dire scrivo 1, devo cercare tutti quei codici che incominciano con 1,
>se scrivo A, devo cercare ...... tutti quei record che incominciano con A.

quindi hai 1 parametro di lunghezza 1 carattere
e vuoi filtrare sul campo Codice tutti i record che iniziano per il tuo parametro


io abbandonerei il LIKE a favore di LEFT(Codice,1)
che restituisce appunto il 1° carattere a sinistra


se fosse Access farei cosi:
SELECT T2.T2Id, T2.Codic, T2.Descr, T2.UnMis, T2.CoIva, T2.AlIva, T2.Prezz FROM T2 WHERE (Left([T2].[Codic],1)=[xxxx]) ;
che tradotto in SQLServer
USE Test5 GO declare @xxxx nvarchar(1) set @xxxx = 'f' SELECT T2Id, Codic, Descr, UnMis, CoIva, AlIva, Prezz FROM dbo.T2 WHERE (LEFT(Codic, 1) = @xxxx) ; GO


Se invece del primo carattere vuoi i primi n caratteri allora usi anche il Len(.....) che restituisce il numero di caratteri del parametro .....
SELECT T2.T2Id, T2.Codic, T2.Descr, T2.UnMis, T2.CoIva, T2.AlIva, T2.Prezz FROM T2 WHERE (Left([T2].[Codic],Len([xxxx]))=[xxxx]) ;
USE Test5 GO declare @xxxx nvarchar(50) set @xxxx = 'df' SELECT T2Id, Codic, Descr, UnMis, CoIva, AlIva, Prezz FROM dbo.T2 WHERE (LEFT(Codic, LEN(@xxxx)) = @xxxx) ; GO

jekisi Profilo | Senior Member

Io la tabella l' o strutturata in questo modo:

Codice:Numerico


Descrizione:Nchar


Prezzo:Nchar

Quando aggiungo la query con Like sul Dataset

SELECT Codice, Descrizione, Unitàmisura, CodiceIva, AliquotaIva, Prezzo
FROM Articoli
WHERE (Descrizione LIKE @Param2 & '%')

andando avanti mi restituisce questo errore:

I tipi di dati nchar e varchar nell' operatore sono incompatibili.




1366x768 316Kb






Potete venirmi incontro?

Da premettere che sono alle prime con Sql Server.

Distinti Saluti

Fabio Messina

boccia75 Profilo | Junior Member

Ciao!
E' sbagliato il carattere per la concatenazione.
Non usare la &, utilizza il +.
Ciao.

jekisi Profilo | Senior Member

Ciao, la query funziona ma non ottengo ciò che vorrei.

Se mi scrivi il tuo indirizzo e-mail ti invio un video per spiegare meglio ciò che vorrei ottenere che qui non me lo fa allegare.

boccia75 Profilo | Junior Member

Ciao!
Preferirei che tu mi indicassi la struttura della tabella (script di creazione tabella), alcune righe della tabella e, in base alle righe che mi hai passato, il risultato che vuoi ottenere.
Ciao.

jekisi Profilo | Senior Member

Allego 2 video con ciò che ottengo col db di sql e ciò che vorrei ottenere facendo riferimento al db di Access:

Ciò che ottengo col db di Sql

jekisi Profilo | Senior Member

Ciò che vorrei ottenere:

boccia75 Profilo | Junior Member

Ciao Jekisi.
Ho visto il tuo video e l'unica cosa che ti posso dire è quella di provare a lanciare la tua query da un management studio di sql (non lanciarla da visual studio).

fai in questo modo:

apri il management studio e scrivi questa query

declare @param varchar(10)

set @param='U'

select * from tua_tabella where campo like @param + '%' (modificando il nome di tua_tabella e campo)


e prova a vedere se ottieni il risultato che ti aspetti.

Se in questo modo ottieni ciò che vuoi, il problema si presenta su visual studio.

Ciao.

jekisi Profilo | Senior Member

Ho fatto a prova, ma non ottengo nulla, allego il video.

Distinti Saluti

Fabio Messina

boccia75 Profilo | Junior Member

Ciao Fabio,
schiaccia il pulsante "Esegui" (oppure F5) e non "Debug": in questo modo esegui la query e vediamo il risultato.

Se non dovesse darti il risultato richiesto, da management studio vai sulla tabella , tasto destro "crea script per tabella" e mi alleghi lo script.
In questo modo posso provare anche io.

Ciao.

jekisi Profilo | Senior Member

Ciao, la query funziona, ma non capisco come creare lo script.

Allego il video.

Distinti Saluti

Fabio Messina

boccia75 Profilo | Junior Member

Ciao Fabio,
dal momento che la query è corretta non ho più necessità dello script della tabella.
A questo punto io mi fermo, infatti il problema è a livello di codice programma (e qui non ti so aiutare).
Qualcuno che ne sa più di me ti potrà aiutare.
Ciao.

Visto che ci sono ti dico come creare lo script della tabella (non ti ho dato tutte le informazioni prima, scusa):
selezioni la tabella
tasto dx --> crea script per tabella --> Genera codice per istruzione create in --> poi decidi dove mettere lo script (nella finestra della query, in un file ....)
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