Sql server SQLServer存储过程

Sql server SQLServer存储过程,sql-server,tsql,stored-procedures,full-text-search,Sql Server,Tsql,Stored Procedures,Full Text Search,我想听听你们是否有人想做以下事情: 我有一个表包含一些卡片定义[id][Company][Mode],这可能是奥迪100、福特野马等。然后我有另一个字段,它是一个包含汽车和车型的字符串,这可能是“福特野马2.5T”,然后我需要从卡片定义中找到正确的id。我想做什么 @CarDefintion = "Ford Mustang 2.5T" Select top 1 CarDefinitionId from dbo.CarModelDefinition where CONTAINS(Mode

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

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

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


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

使用类似于
搜索带有通配符列值的字符串

@CarDefintion = "Ford Mustang 2.5T"

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

+
是字符串连接运算符。

问题是我有字符串“Ford Mustang 2.5T”,我不知道型号和公司是什么,因此我不能使用常规where语句。我需要使用表CardDefinitions从字符串中查找车型和公司,表CardDefinitions包含所有车型和公司(如问题中所述)。测试此项,您会发现它不适用于任何合理的数据。现在更新了代码,我想我知道了更多您想要的内容这是一个非常好的主意,问题是它返回的是一辆“福特a”,它是否应该看文字而不是字符,这样它就不会在野马中寻找a,但不仅仅是“野马”这个词吗?当我在模型前添加一个空格符号时,它起作用了,例如,从dbo.CarModelDefinition中选择top 1 CarModelDefinition.CarModelDefinition,其中“Ford Mustang 2.5T”类似“%”+CarModelDefinition.model+“%”和“Ford Mustang 2.5T”类似“%”+CarModelDefinition.Company+“%”添加空格将起作用如果每个定义都采用“公司模型”的形式。我不确定为什么要添加空格(我必须查看CarModelDefinition中的行),所以要彻底测试。这是因为如果没有空格,它只会查找例如Mustang或名为“A”的车型中的“A”。通过添加空格,它将查找前面的字符串和空格的组合,因此您可以确定您在搜索词中得到的是整个单词,而不是一个字母-我希望这不是太多的胡言乱语,但非常感谢。