2009-05-03 18 views
0

Ich würde gerne hören, wenn jemand von euch eine Idee hat, folgendes zu tun: Ich habe eine Tabelle mit einigen cardefinitions [id] [Unternehmen] [Mode], könnte dies zum Beispiel Sei Audi 100, Ford Mustan etc. Ich habe dann ein anderes Feld, das eine Zeichenfolge ist, die sowohl das Auto als auch das Modell enthält, das könnte "Ford Mustang 2.5T" sein, ich muss dann die richtige ID aus der Autodefinition finden. Ich obwohlSQLServer Stored Procedure

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 kein ENTHÄLT oder FREETEXT- Prädikat auf Tabelle oder indizierte Sicht‚dbo.CarModelDefinition‘verwenden, da es nicht zum Volltext ist indexiert. " Hat jemand eine Idee, wie ich das lösen kann?

+0

aktualisiert den Code jetzt, dass ich denke, ich weiß mehr, was Sie wollen –

Antwort

1

die Zeichenfolge mit den wildcarded Spalten suchen LIKE Werten.

@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.

+0

Das war eine wirklich gute Idee, das Problem ist, dass es eine ‚Ford A‘ zurückkehrt, ist es möglich, dass es in Worten und nicht die Zeichen aussehen soll, so dass es nicht für einen in Mustang aussehen wird, sondern nur das Wort Mustang? – Dofs

+0

Es funktionierte, wenn ich ein Leerzeichen vor dem Modell hinzugefügt habe, z. Wählen Sie oben 1 CarModelDefinition.CarModelDefinitionId von dbo.CarModelDefinition wo 'Ford Mustang 2.5T' like '%' + CarModelDefinition.Model + '%' UND 'Ford Mustang 2.5T' like '%' + CarModelDefinition.Company + ' % ' – Dofs

+0

Das Hinzufügen eines Platzes funktioniert, wenn jede Definition das Formular' Firmenmodell 'hat. Ich bin mir nicht sicher, warum Sie den Speicherplatz hinzufügen mussten (ich müsste die Zeilen in CarModelDefinition sehen), also testen Sie das gründlich. – tpdi

0
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)

+0

Das Problem ist, dass ich die Zeichenfolge "Ford Mustang 2.5T" habe und ich weiß nicht, was das Modell und die Firma ist, daher kann ich nicht verwenden eine regelmäßige Where-Anweisung. Ich muss das Modell und die Firma aus der Zeichenfolge finden, indem ich die Tabelle CarDefinitions verwende, die alle Automodelle und Firmen enthält (wie in der Frage geschrieben). – Dofs

0

Muss @CarDefintion eine Zeichenfolge sein? Wäre es möglich, es zu einem Array von Model und Company zu machen, auf das Sie dann in Ihrem SQL verweisen könnten?

Gelingt das würden Sie absolut sicher sein, dass jemand gerade nicht „Mustang 2.5T“ setzt anstelle von „Ford Mustang 2.5T“? Wenn Sie absolut sicher sein können, besteht die Möglichkeit darin, nach Leerzeichen zu splitten. Führen Sie dann in jedem Segment eine Reihe von Suchvorgängen durch, um zu versuchen, sie zu lokalisieren.

1
@CarDefintion = "Ford Mustang 2.5T" 

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

Testen Sie dies und Sie werden feststellen, dass es für keine sinnvollen Daten funktioniert. – tpdi