Announcement

Collapse
No announcement yet.

Store Procedure um suche zu optimieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Store Procedure um suche zu optimieren

    Guten Morgen,
    ich sitze an folgenden Problem ich möchte die Suche unsere Hompage optimieren. Ich übergebe den Suchstring einer funktion in sql die splittet den in die verschiedenen Wörter die durch ein lehrzeichen getrennt sind und speichert sie in einer datenbank ab. Jetzt möchte ich mit einer store procedure diese datenbank auslesen und die suchwörter in der Produktdatenbank suchen. Ich möchte aber auch eine Priorität vergeben und zwar wenn die suchstrings in dem Titel gefunden wurde soll das Produkt die Priorität 5 bekommen und wenn es in der Beschreibung gefunden wird dann soll es die Priorität 10 bekommen, damit ich die dann später besser ordnen kann. Die Funktion zum splitten des strings ist die folgende:

    ALTER FUNCTION [dbo].[ufn_stringToTable] ( @StringInput VARCHAR(500) )
    RETURNS @OutputTable TABLE ( [String] VARCHAR(10) )
    AS
    BEGIN

    DECLARE @String VARCHAR(100)

    WHILE LEN(@StringInput) > 0
    BEGIN
    SET @String = LEFT(@StringInput,
    ISNULL(NULLIF(CHARINDEX(' ', @StringInput) - 1, -1),
    LEN(@StringInput)))
    SET @StringInput = SUBSTRING(@StringInput,
    ISNULL(NULLIF(CHARINDEX(' ', @StringInput), 0),
    LEN(@StringInput)) + 1, LEN(@StringInput))

    INSERT INTO @OutputTable ( [String] )
    VALUES ( @String )
    END

    RETURN
    END

    das dene ich ist auch richtig dann habe ich das problem bei der store procedure. die so aussieht:
    CREATE PROCEDURE dbo.suche
    (@searchstring char(36))

    AS
    CREATE TABLE tempdb.dbo.suche
    (ProductID int,
    Name char(500),
    TitelDe1 char(500),
    TitelDe2 char(500),
    TitelDe3 char(500),
    Anfangsdatum date,
    Produktart char (50),
    year int,
    month int,
    Priorität int)
    SELECT ProductID,Name ,TitelDe1, TitelDe2, TitelDe3, Anfangsdatum, Produktart, year, month FROM product
    WHERE TitelDe1 LIKE % (SELECT String FROM OutputTable) % OR
    TitelDe2 LIKE %(SELECT String FROM OutputTable)% OR
    TitelDe3 LIKE %(SELECT String FROM OutputTable)%
    AS INSERT INTO suche
    ( [ProductID],
    [Name],
    [TitelDe1],
    [TitelDe2],
    [TitelDe3],
    [Anfangsdatum],
    [Produktart],
    [year],
    [month],
    [Priorität])

    VALUES
    (@ProductID,
    @Name,
    @TitelDe1,
    @TitelDe2,
    @TitelDe3,
    @Anfangsdatum,
    @year,
    @month
    @Produktart,
    5)

    /* In Beschreibung suchen*/
    SELECT ProductID,Name ,TitelDe1, TitelDe2, TitelDe3, Anfangsdatum, Produktart FROM product
    WHERE eBeschreibung LIKE %(SELECT String FROM OutputTable)%
    AS INSERT INTO suche
    ( [ProductID],
    [Name],
    [TitelDe1],
    [TitelDe2],
    [TitelDe3],
    [Anfangsdatum],
    [Produktart],
    [year],
    [month],
    [Priorität])

    VALUES
    (@ProductID,
    @Name,
    @TitelDe1,
    @TitelDe2,
    @TitelDe3,
    @Anfangsdatum,
    @year,
    @month
    @Produktart,
    10)

    TRUNCATE TABLE OutputTable
    RETURN
    SELECT * FROM suche ORDER BY [Priorität] ASC, [year] DESC, [month] DESC

    könnte mir einer vielleicht helfen und sagen wo das problem liegt?

    Vielen Dank
    im vorraus

    mfg
    Konstantin
Working...
X