Announcement

Collapse
No announcement yet.

WHERE CONTAINS mit Variable und Paltzhalter

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

  • WHERE CONTAINS mit Variable und Paltzhalter

    Hallo,

    ich versuche einen Volltextkatalog über folgendes Script abzufragen.

    Code:
    DECLARE @suche nvarchar(255)
    SET @suche = 'Bremen'
    
    SELECT * FROM tb_orte WHERE CONTAINS(ORT, @suche)
    Das klappt soweit auch gut und zügig :-)

    Jetzt kann es aber sein das die Clientanwendung mir statt des Suchbegriffes nur den Anfangsbuchstaben des Ortes übermittelt welcher gesucht werden soll.
    Also ungefähr so:

    Code:
    DECLARE @suche nvarchar(255)
    SET @suche = 'B'
    
    SELECT * FROM tb_orte WHERE CONTAINS(ORT, @suche)
    Wie schaffe ich es jetzt das alle Orte mit dem Anfangsbuchstaben "B" angezeigt werden. Mit Platzhaltern, wie * oder % funktioniert das irgendwie nicht.

    Gruß,
    Andre

  • #2
    DECLARE @suche nvarchar(255)
    SET @suche = 'B'

    SELECT * FROM tb_orte WHERE ORT LIKE @suche+'%'

    Comment


    • #3
      Oder mal anders gefragt:
      Die Tabelle tb_orte, enthält die je Datensatz nur einen Ortsnamen oder sind das lange Texte, in denen irgendwo der Ortsname vorkommt?

      Bei ersterem macht ein Volltext-Index / Katalog nicht so viel Sinn, ausser Du willst auch eine "Ähnlichkeitssuche" erreichen. Da wäre ein normaler Index und die Verwendung von LIKE mit Sicherheit bereits ausreichend (Ausnahme: Suche nach LIKE '%B%').


      CONTAINS funktionieren auch mit Platzhalter , das Beispiel dazu sieht so aus:

      SELECT Name
      FROM Production.Product
      WHERE CONTAINS(Name, ' "Chain*" ');

      Also: * also Wildcard und Anführungszeichen, sonst funktioniert es nicht (Test mit nur einem Zeichen: geht)
      Olaf Helper

      <Blog> <Xing>
      * cogito ergo sum * errare humanum est * quote erat demonstrandum *
      Wenn ich denke, ist das ein Fehler und das beweise ich täglich

      Comment


      • #4
        Hallo,

        danke für die Antworten.

        @ebis
        SELECT * FROM tb_orte WHERE ORT LIKE @suche+'%'
        durchsucht soweit ich weiß nicht den Volltextkatalog sondern die Tabelle.


        @O. Helper
        Du hast Recht gehabt. Wenn ich einen Index auf die entsprechende Spalte lege ist die Abfrage fast genauso schnell als wenn ich das über den Volltextkatalog mache.
        Mein Problem ist zwar gelöst, jetzt würde mich aber doch interessieren wie das mit der Abfrage über einen Volltextkatalog geht. Dein Beispiel hatte ich auch schon in der Doku gefunden, aber ich war zu dumm das mit einer Variable als Suchbegriff umzusetzen.
        Das hier funktioniert dummerweise nicht:

        Code:
        SELECT Name
        FROM Production.Product
        WHERE CONTAINS(Name, @Chain + ' "*" ');

        Comment


        • #5
          Hallo Andre,

          die Anführungszeichen müssen den Suchbegriff einschließen; Du hast nur das * eingeschlossen.

          Um auf Dein Beispiel zurück zu kommen, das müsste so aussehen:

          [highlight=SQL]DECLARE @suche nvarchar(255)
          SET @suche = 'B'

          SET @Suche = ' "' + @Suche + '*"';

          SELECT @Suche
          SELECT * FROM tb_orte WHERE CONTAINS(ORT, @suche)
          [/highlight]

          Das zusammensetzen des Suchstrings kannst Du auch wie zuvor im CONTAINS machen, hier habe es hier nur zur Verdeutlichung abgesetzt.
          Olaf Helper

          <Blog> <Xing>
          * cogito ergo sum * errare humanum est * quote erat demonstrandum *
          Wenn ich denke, ist das ein Fehler und das beweise ich täglich

          Comment

          Working...
          X