Frage

Ich würde gerne hören, wenn jemand von euch eine Idee hat, folgendes zu tun: Ich habe eine Tabelle einige cardefinitions [id] [Unternehmen] [Mode] enthält, könnte dies zum Beispiel sein Audi 100, Ford Mustan usw. ich ein anderes Feld dann haben, die eine Zeichenfolge sowohl das Auto und das Modell enthält, ist diese „Ford Mustang 2.5T“ sein könnte, muss ich dann die richtige ID aus der cardefinition finden. Ich dachte zu tun

@CarDefintion = "Ford Mustang 2.5T"
Select top 1 CarDefinitionId 
  from dbo.CarModelDefinition 
 where CONTAINS(Model,@Cardefinition) 
   AND Contains(Company, @Cardefinition)

Aber da Modell + Company ist nicht eindeutig bekomme ich diesen Fehler: „Kann nicht verwenden ein ENTHÄLT oder FREETEXT- Prädikat auf Tabelle oder indizierte Sicht‚dbo.CarModelDefinition‘, weil es nicht volltextindiziert ist“ Hat jemand eine Idee, wie ich dieses Problem lösen kann?

War es hilfreich?

Lösung

Suchen Sie die Zeichenfolge mit den wildcarded Spalten Werte LIKE verwenden.

@CarDefintion = "Ford Mustang 2.5T"
Select top 1 CarDefinitionId 
  from dbo.CarModelDefinition 
 where @Cardefinition like '%' + model + '%'
   AND @Cardefinition like '%' + company + '%';

+ ist der String catenation Operator.

Andere Tipps

@CarDefintion = "Ford Mustang 2.5T"

Select top 1 CarDefinitionId 
  from dbo.CarModelDefinition 
 where @Cardefinition LIKE Model OR @Cardefinition LIKE Company 

Muss @CarDefintion eine Zeichenfolge sein? Wäre es möglich, es eine Reihe von Modell und Unternehmen zu machen, die Sie dann in Ihrem SQL-Referenz könnten?

Gelingt das würden Sie absolut sicher sein, dass jemand gerade „Mustang 2.5T“ nicht setzen anstelle von „Ford Mustang 2.5T“? Wenn Sie können absolut sicher sein, dann ein Weg, es zu tun ist durch die Räume dann eine Reihe von Lookups auf jedes Segment zu teilen, es zu versuchen und zu lokalisieren.

DECLARE @CarDefintion VARCHAR(25)
        SET @CarDefintion = 'Ford Mustang 2.5T'

DECLARE @Make  VARCHAR(25)
DECLARE @Model VARCHAR(25)
SELECT @Make  = SUBSTRING(@CarDefintion,0,CHARINDEX(' ',REVERSE(@CarDefintion)))
SELECT @Model = LTRIM( REPLACE(@CarDefintion,@Make,'')) 

--SELECT @Make,@Model

        SELECT TOP 1 * 
          FROM dbo.CarModelDefinition 
         WHERE Model   = @Model
           AND Company = @Make

contains () Funktionen für die Volltextsuche sind, die Sie wahrscheinlich nicht verwenden (daher die Fehler)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top