06. februar 2009 - 14:11Der er
11 kommentarer og 1 løsning
Stored Procedure LIKE keyword???
Jeg har lavet en stored procedure som skal søge på nogle forskellige parametre. Men når jeg kører den så returnerer den hele tabellen. Dvs den søger ikke rigtig. Storedprocedruen er den nedenstående. Men når jeg kun kører med en LIKE keyword. dvs kun søger på en parameter, så fungerer det helt fint. Men jeg vil have den til at søge på alle parametrene.
AS BEGIN SELECT FirmaID, Navn, Adresse, Postnr, Distrikt, Email, Hjemmeside, CVR, Beskrivelse, Omraade, Tlf, Dato FROM Firma WHERE Adresse LIKE @Adresse + '%' OR Navn LIKE @Navn + '%' OR Postnr LIKE @Postnr + '%' OR Distrikt LIKE @Distrikt + '%' OR Omraade LIKE @Omraade + '%' OR Tlf LIKE @Tlf + '%' AND Firma.Enabled = 1
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
metoden som jeg bruger til at kalde ned til databasen ser således ud: public DataTable FindFirma(Firma firma) { Database ConnectionStringSurfTown = DatabaseFactory.CreateDatabase(); DbCommand command = ConnectionStringSurfTown.GetStoredProcCommand("stp_FindFirma");
Enten aabergs loesning med at addde % paa C# siden, hvis der er nogle data og ellers blank streng (eneste ulempe er hvis vaerdien i databasen er blank) eller i SP:
OR (felt IS NOT NULL AND felt <> '' AND felt LIKE felt + '%')
Jeg troede i starten at aaberg's løsning gav det rigtige resultat. Men nu hvor jeg har oprettet flere poster i tabellen, har jeg fundet ud af at den faktisk ikke søger rigtig. Den smider hele tabellens indhold ud. Er der slet ikke en måde, hvor man kan have en multiple LIKE keyword på en effektiv måde?
AS BEGIN SELECT FirmaID, Navn, Adresse, Postnr, Distrikt, Email, Hjemmeside, CVR, Beskrivelse, Omraade, Tlf, Dato FROM Firma WHERE Navn LIKE @Navn OR Adresse LIKE @Adresse OR Navn LIKE @Navn OR Postnr LIKE @Postnr OR Distrikt LIKE @Distrikt OR Omraade LIKE @Omraade OR Tlf LIKE @Tlf AND Firma.Enabled = @Enabled
Jeg fandt fejlen. WHERE sætningen skal skrives således med paranteser:
WHERE Firma.Enabled = @Enabled AND ( Navn LIKE @Navn OR Adresse LIKE @Adresse OR Navn LIKE @Navn OR Postnr LIKE @Postnr OR Distrikt LIKE @Distrikt OR Omraade LIKE @Omraade OR Tlf LIKE @Tlf )
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.