Pregunta

Me gustaría saber si alguno de ustedes tiene una idea para hacer lo siguiente: Tengo una tabla que contiene algunas definiciones de carde [id] [Compañía] [Modo], esto podría p. Ej. ser Audi 100, Ford Mustan, etc. Luego tengo otro campo que es una cadena que contiene tanto el auto como el modelo, este podría ser "Ford Mustang 2.5T", entonces necesito encontrar la identificación correcta de la definición del auto. Pensé en hacer

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

Pero como Model + Company no es único, aparece este error: " No se puede usar un predicado CONTAINS o FREETEXT en la tabla o vista indexada 'dbo.CarModelDefinition' porque no está indexado en texto completo. " ¿Alguien tiene una idea de cómo puedo resolver esto?

¿Fue útil?

Solución

Busque la cadena con los valores de las columnas con caracteres comodín usando LIKE .

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

+ es el operador de cateación de cadenas.

Otros consejos

@CarDefintion = "Ford Mustang 2.5T"

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

¿Debe @CarDefintion ser una cadena? ¿Sería posible convertirlo en una matriz de Modelo y Compañía a la que luego podría hacer referencia en su SQL?

De lo contrario, estarías absolutamente seguro de que alguien no solo pone "Mustang 2.5T" en lugar de "Ford Mustang 2.5T" Si puede estar absolutamente seguro de que una forma de hacerlo es dividir por espacios, haga una serie de búsquedas en cada segmento para intentar localizarlo.

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
Las funciones

CONTAINS () son para la búsqueda de texto completo, que probablemente no estés usando (por lo tanto, los errores)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top