我想听听你们是否有任何想法要做以下事情: 我有一个表包含一些cardefinitions [id] [Company] [Mode],这可能是例如是奥迪100,福特穆斯坦等。然后我有另一个字段,其中包含汽车和模型的字符串,这可能是“福特野马2.5T”,然后我需要从汽车定义中找到正确的ID。我虽然做了

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

但是由于Model + Company不是唯一的,我得到这个错误:“不能在表或索引视图'dbo.CarModelDefinition'上使用CONTAINS或FREETEXT谓词,因为它不是全文索引的。” 有没有人知道如何解决这个问题?

有帮助吗?

解决方案

使用 LIKE 搜索带有通配符列值的字符串。

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

+ 是字符串catenation运算符。

其他提示

@CarDefintion = "Ford Mustang 2.5T"

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

必须@CarDefintion是一个字符串吗?是否有可能使它成为一个模型和公司的数组,然后您可以在SQL中引用它?

如果不这样,你绝对肯定有人不会只是把“Mustang 2.5T”放到而不是“福特野马2.5T”?如果您可以绝对确定,那么一种方法是按空格分割,然后对每个段进行一系列查找以尝试找到它。

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()函数用于全文搜索,您很可能没有使用(因此错误)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top