SQL Server Stored Procedure
-
03-07-2019 - |
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?
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)