11. juli 2004 - 19:51Der er
6 kommentarer og 2 løsninger
Hjælp til SQL stored procedure - tekstuel søgning
Jeg har en tabel, der blandt andet indeholder 2 kolonner med tekst. Jeg ønsker at kunne lave en søgning i disse kolonner og returnere de rækker, der matcher søgekriteriet. Søgekriteriet er en tekststreng, og det skal være muligt at matche hele ord/dele af ord, med og uden forskel på store og små bogstaver og evt. med wildcards. Det skal også være muligt at returnere rækker, der indeholder alle ord fra søgekriteriet, eller række, der kun indeholder nogle af ordene.
Jeg bruger MS SQL Server 2000 og tilgår databasen fra ASP .NET. Jeg vil gerne opnå den beskrevne funktionalitet ved at kalde en stored procedure med søgekriteriet som parameter og få returneret de rækker, der passer til søgningen. Jeg er ret grøn til SQL og stored procedures, så spørgsmålet er: Hvordan løses ovenstående ?
Sagen er den at jeg kun har lov at søge i databasen, og ikke ændre den, heller ikke at oprette Full Text Catalogs. Teksten, der skal søges i kan være hvad som helst, f.eks. ordlyden på en hjemmeside.
Uden fti er sådanne søgninger virkelig latterligt langsomme.
Men måden du kan gøre det på er:
select * from myTable where textheader like '%bush%'
Jeg forudsætter et kolonnen textheader vil indeholde "The Washington Post skriver mandag, at præsident George W. Bush og hans administration arbejder på en model, ....."
Jo større din tabel er jo langsommere vil det gå da den skal lave en full table scan ved hver query. Du kan desværre heller ikke opnå nogen performance forbedring ved at oprette et index da du tillader wildcard på begge sider af søge ordet.
Hvis du vil lave en stored procedure så gør sådan her:
create proc usp_find_articles @searchword varchar(200) as begin
select * from myTable where textheader like '%' + @searchword + '%'
end
Synes godt om
Ny brugerNybegynder
Din løsning...
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.