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?

Était-ce utile?

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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top