2009-05-03 9 views
0

次のことを行うアイデアがあれば聞いてください。 私はいくつかのcardefinitions [id] [Company] [Mode]を含む1つのテーブルを持っています。 Audi 100、Ford Mustanなどです。私は車とモデルの両方を含む文字列である別のフィールドを持っています。これは "Ford Mustang 2.5T"である可能性があり、cardefinitionから正しいIDを見つける必要があります。 Iモデル+当社は一意ではないので、SQLServerストアドプロシージャ

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

しかしを行うので、私はこのエラーが出るけれども:それはフルテキストではありませんので、は、「テーブルまたはインデックス付きビュー 『dbo.CarModelDefinition』に含まれているか、FREETEXT述語を使用することはできませんインデックスされています。 誰も私がこれをどのように解決できるか考えていますか?

+0

コードを更新しました。あなたが望むものをもっと知っていると思っています。 –

答えて

1

LIKEを使用してワイルドカードの列の値を持つ文字列を検索します。

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

+は、文字列カテーション演算子です。

+0

これは本当に良いアイデアでした、問題はそれが「フォードA」を返すことです、それは単語ではなく、文字列を見なければならない可能性があるので、それはムスタングではなくむしろ単語ムスタング? – Dofs

+0

モデルの前にスペース記号を追加したときに機能しました。 dbo.CarModelDefinition からトップ1 CarModelDefinition.CarModelDefinitionId を選択する場所 'フォードマスタング2.5T' '%' のような+ CarModelDefinition.Model + '%' AND '%' のような 'フォードマスタング2.5T' + CarModelDefinition.Company + ' % ' – Dofs

+0

すべての定義が' Company Model 'の形式であればスペースを追加できます。なぜ私は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」という文字列があり、モデルと会社が何であるか分からないためです。正規のwhereステートメント。私はモデルと会社をすべての車のモデルと企業(質問に書かれている)を含むテーブルCarDefinitionsを使用して文字列から見つける必要があります。 – Dofs

0

を(それゆえ、エラー)を使用していない、フルテキスト検索は、@CarDefintion文字列でなければならないために()関数がありCONTAINS? ModelとCompanyの配列をSQLで参照できるようにすることは可能でしょうか?

誰かが "Ford Mustang 2.5T"の代わりに "Mustang 2.5T"を置くだけではないということは絶対に確信しますか?もしあなたが絶対に確かめることができれば、それを行う1つの方法は、スペースで分割し、各セグメントで一連のルックアップを試して見つけようとすることです。

1
@CarDefintion = "Ford Mustang 2.5T" 

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

これをテストすると、合理的なデータではうまくいかないことがわかります。 – tpdi