2016-03-28 6 views
0

私は、テーブル[選択]にはId、Id_purchase、Id_employeeという列があります。 Idは主キーで、すべてint型です。SQL Serverは、別のテーブルに記載されている単語を検索して置き換えます

Id | Id_purchase | Id_employee 
1 |  1  | 1 

テーブル[従業員]はId_employee(int型)と名前がテーブルのvarchar(250)

Id_employee | name 
1   | name1 
2   | name2 
3   | name3 

でいる[購入] Id_purchase(int型)と記事はVARCHAR(250)

ありました
Id_purchase |  article 
    1  | book1 pattern ABC 
    2  | book2 autor hjk abc 
    3  | book3 about xyz 
    4  | book4 JJJJ 

テーブル[key_search]にはIdがあり、クエリはvarchar(100)です。 [従業員]から各従業員のためのテーブルに追加するレコードを作成する方法

ID | query 
1 | book*abc 
2 | book*about 

[選択]テーブル[key_search]で述べた言葉があるたテーブル[購入]からのすべての購入のIDを。 [key_search]テーブルでは、 "*"は任意の文字数の代わりに使用されます。サンプルでは、​​ "book * abc"のようなクエリは、すべての購入でseachの "%book%abc%"への置換が必要です。

+0

さらにテーブルに追加するには、各従業員のための方法」を、この部分を明確にしてくださいは、[選択]のIDがテーブル[key_search]に記載されている単語がある[Purchase]テーブルからのすべての新規購入。 テーブル[key_search]マーク*は任意の文字数の代替と見なされました。 – TheGameiswar

+0

普通の 'SQL'ではこれが苦痛になります。文字列とパターンを受け取る 'CLR'関数を探します。次に、C#コードでロジックを置き換えて、編集した値を返します。おそらく2つの 'CLR'関数が必要になります.1つは' WHERE'節で使う一致をチェックするためのもので、もう1つは 'UPDATE'節で使う置換のためのものです。 –

+0

はい、CLR関数は簡単ですが、SQLのみを解決する必要があります。 –

答えて

1

たぶん、このように:現在のサンプルについては

SELECT p.Id_purchase, 
     e.Id_employee 
FROM employees e 
CROSS JOIN purchase p 
INNER JOIN key_search k 
    ON p.article LIKE '%' + REPLACE(k.[query],'*','%') + '%' 

、結果は以下のようになる:

| Id_purchase | Id_employee | 
|-------------|-------------| 
|   1 |   1 | 
|   1 |   2 | 
|   1 |   3 | 
|   2 |   1 | 
|   2 |   2 | 
|   2 |   3 | 
|   3 |   1 | 
|   3 |   2 | 
|   3 |   3 | 
関連する問題