SQLServer存储过程

时间:2009-05-03 12:14:15

标签: sql-server tsql stored-procedures full-text-search

我想听听你们是否有任何想法要做以下事情: 我有一个表包含一些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谓词,因为它不是全文索引的。” 有没有人知道如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

@CarDefintion = "Ford Mustang 2.5T"

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

答案 1 :(得分:1)

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

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

+是字符串catenation运算符。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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