2012-04-01 5 views
0

次のリクエストのクエリを書き込む方法は? 私のテーブル:行の列値の複数のパラメータを比較するにはどうすればよいですか?

id  designation 
1   developer,tester,projectlead 
1   developer 
1   techlead 

if id=1,designation="'developer'" 

はその後、第一、第二records.Because 2行はヴェンカトを持っている必要があります。 の場合id=1,designation="'developer','techlead'"は結果として3レコードを取得する必要があります。 私は、そのテーブルにレコードを挿入するためのサービスを1つ書いています。私は、同じカラムを持つすべての指定をコーマで保存するテーブルを1つ保守しています。ユーザーパスID = 1つの名称=「『開発』、 『techlead』が」その後、私はすべての指定を保存するために1つのテーブルのみを維持しています上記の3 records.soをプルする必要がある場合は、サービスを利用することにより

SP :

ALTER PROCEDURE [dbo].[usp_GetDevices] 
@id INT, 
@designation NVARCHAR (MAX) 
AS 

BEGIN 
declare @idsplat varchar(MAX) 
set @idsplat = @UserIds 
    create table #u1 (id1 varchar(MAX)) 
    set @idsplat = 'insert #u1 select ' + replace(@idsplat, ',', ' union select ') 
    exec(@idsplat) 
    Select 
    id FROM dbo.DevicesList WHERE [email protected] AND designation IN (select id1 from #u1) 
    END 

答えて

3

あなたはブール演算子を使用する必要がANDとOR LIKEと一緒に:

IF empid = 1 AND (empname LIKE '%venkat%' OR empname LIKE '%vasu%') 

上記の例ではempid EQUですべての行を返します。 als 1およびempnameは、venkatまたはvasuを含有する。

明らかに、ユーザーからの入力に基づいてそのクエリを作成する必要がありますが、これはfinallyクエリの外観の例に過ぎません。

編集:SqlServer内でこれを実行しようとすると非常に困難になるので、ストアドプロシージャの呼び出し方法を実際に変更する必要があります。これを行うことができない場合は、designationパラメータを,に分割してください(これにはいくつかの方法を示すthis questionの回答があります)。その値を一時テーブルに挿入してください。次に、this articleに記載されているLIKEのこの一時テーブルのJOINを使用できます。

+0

ユーザーID = 1とdesigantion = "'開発者'、 'テスター'、 'techlead'、 'projectlead'などのハードコードは必要ありません。複数のパラメータを渡すようにしてください。テスター、techlead、projectleadのレコードは合格IDと一致します...... – user1237131

+0

@ user1237131:もちろん、ユーザーからの入力に基づいてそのクエリーを作成する必要があります。これは最終的なクエリーの外観の例です。 – ChrisWue

+0

こんにちは、私のSPを確認してくださいこれを変更してください。 – user1237131

関連する問題