Domanda

Vorrei sapere se qualcuno di voi ha un'idea per fare quanto segue: Ho una tabella contenente alcune cardefinitions [id] [Company] [Mode], ad esempio essere Audi 100, Ford Mustan ecc. Poi ho un altro campo che è una stringa contenente sia la macchina che il modello, questo potrebbe essere "Ford Mustang 2.5T", quindi devo trovare l'ID corretto dalla cardefinition. Ho pensato di farlo

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

Ma poiché Model + Company non è univoco, visualizzo questo errore: " Impossibile utilizzare un predicato CONTAINS o FREETEXT sulla tabella o sulla vista indicizzata 'dbo.CarModelDefinition' perché non è indicizzato full-text. " Qualcuno ha un'idea di come posso risolvere questo?

È stato utile?

Soluzione

Cerca la stringa con i valori delle colonne con caratteri jolly utilizzando LIKE .

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

+ è l'operatore di catenazione delle stringhe.

Altri suggerimenti

@CarDefintion = "Ford Mustang 2.5T"

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

@CarDefintion deve essere una stringa? Sarebbe possibile renderlo un array di Modello e Azienda a cui potresti fare riferimento nel tuo SQL?

In caso contrario, si sarebbe assolutamente sicuri che qualcuno non si limitasse a mettere "Mustang 2.5T" invece di "Ford Mustang 2.5T"? Se puoi essere assolutamente sicuro, un modo per farlo è dividere per spazi, quindi fai una serie di ricerche su ogni segmento per cercare di localizzarlo.

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

Le funzioni CONTAINS () sono per la ricerca full text, che molto probabilmente non stai usando (da qui gli errori)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top