Procédure stockée SQLServer
-
03-07-2019 - |
Question
J'aimerais savoir si l'un d'entre vous a une idée de ce qui suit: J'ai une table contenant certaines cardefinitions [id] [Société] [Mode], cela pourrait, par exemple. être Audi 100, Ford Mustan, etc. J'ai alors un autre champ qui est une chaîne contenant à la fois la voiture et le modèle, il pourrait s'agir de "Ford Mustang 2.5T", il me faut alors trouver le bon identifiant à partir de la cardéfinition. Je pensais faire
@CarDefintion = "Ford Mustang 2.5T"
Select top 1 CarDefinitionId
from dbo.CarModelDefinition
where CONTAINS(Model,@Cardefinition)
AND Contains(Company, @Cardefinition)
Mais étant donné que Model + Company n'est pas unique, le message d'erreur suivant s'affiche: "Vous ne pouvez pas utiliser un prédicat CONTAINS ou FREETEXT dans la vue indexée ou table 'dbo.CarModelDefinition' car il ne s'agit pas d'indexation en texte intégral." / em> Quelqu'un at-il une idée de la façon dont je peux résoudre ce problème?
La solution
Recherchez la chaîne contenant les valeurs des colonnes avec des caractères génériques à l'aide de LIKE
.
@CarDefintion = "Ford Mustang 2.5T"
Select top 1 CarDefinitionId
from dbo.CarModelDefinition
where @Cardefinition like '%' + model + '%'
AND @Cardefinition like '%' + company + '%';
+
est l'opérateur de caténation de chaînes.
Autres conseils
@CarDefintion = "Ford Mustang 2.5T"
Select top 1 CarDefinitionId
from dbo.CarModelDefinition
where @Cardefinition LIKE Model OR @Cardefinition LIKE Company
@CarDefintion doit-il être une chaîne? Serait-il possible d’en faire un tableau de Model and Company que vous pourriez ensuite référencer dans votre code SQL?
Si vous ne le faites pas, vous seriez absolument certain que quelqu'un ne met pas simplement "Mustang 2.5T" au lieu de "Ford Mustang 2.5T"? Si vous pouvez être absolument certain, une solution consiste à diviser les espaces en espaces, puis à effectuer une série de recherches sur chaque segment pour essayer de le localiser.
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
Les fonctions CONTAINS () sont destinées à la recherche en texte intégral, que vous n'utilisez probablement pas (d'où les erreurs)