2009-05-03 4 views
0

Я хотел бы услышать, если у вас есть идея сделать следующее: У меня есть одна таблица, содержащая некоторые cardefinitions [id] [Company] [Mode], это может быть, например, будь то Audi 100, Ford Mustan и т. д. Затем у меня есть другое поле, которое представляет собой строку, содержащую как автомобиль, так и модель, это может быть «Ford Mustang 2.5T», тогда мне нужно найти правильный идентификатор из кардифининга. Я хотя делатьSQLServer Хранимая процедура

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

Но так как модель + Компания не является уникальным, я получаю эту ошибку: «не может использовать СОДЕРЖИТ или FREETEXT предикат таблицы или индексированного представления„dbo.CarModelDefinition“, потому что это не полный текст индексируется «. Есть ли у кого-нибудь идеи, как я могу это решить?

+0

обновил код сейчас, когда я думаю, что знаю больше, чего вы хотите –

ответ

1

Поиск строки со значениями подстановочных столбцов с использованием LIKE.

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

+ является оператором привязки строк.

+0

Это была действительно хорошая идея, проблема в том, что она возвращает «Форд А», возможно ли, что он должен смотреть на слова, а не на символы, поэтому он не будет искать в Мустанге, а скорее просто слово Mustang? – Dofs

+0

Он работал, когда я добавил знак пространства перед моделью, например. Выберите верхний 1 CarModelDefinition.CarModelDefinitionId из dbo.CarModelDefinition где 'Ford Mustang 2.5T' как '%' + CarModelDefinition.Model + '%' И 'Ford Mustang 2.5T', как '%' + CarModelDefinition.Company + % ' – Dofs

+0

Добавление пространства будет работать, если каждое определение находится в форме «Модель компании». Я не уверен, почему вам пришлось добавить пространство, хотя (мне нужно было бы увидеть строки в CarModelDefinition), поэтому тщательно проверьте это. – tpdi

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 

СОДЕРЖИТ() функции для полнотекстового поиска, которые вы, скорее всего, не используя (отсюда и ошибки)

+0

Проблема в том, что у меня есть строка «Ford Mustang 2.5T», и я не знаю, что такое модель и компания, поэтому я не могу использовать регулярное утверждение. Мне нужно найти модель и компанию из строки, используя таблицу CarDefinitions, которая содержит все модели автомобилей и компании (как написано в вопросе). – Dofs

0

Должен @CarDefintion быть строка? Можно ли сделать его массивом Model и Company, который вы могли бы затем ссылаться на ваш SQL?

Если вы не уверены, что кто-то не просто положил «Mustang 2.5T» вместо «Ford Mustang 2.5T»? Если вы можете быть абсолютно уверены, то один из способов сделать это - разделить по пробелам, затем выполнить серию поисков по каждому сегменту, чтобы попытаться найти его.

1
@CarDefintion = "Ford Mustang 2.5T" 

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

Проверьте это, и вы увидите, что он не работает для каких-либо разумных данных. – tpdi

Смежные вопросы