2012-04-01 47 views
0

如何爲以下請求編寫查詢? 我的表:如何比較行列值的多個參數?

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

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

這時需要的第一,第二records.Because 2行具有venkat。 if id=1,designation="'developer','techlead'"則需要得到3條記錄。 我寫了一個服務插入到該表的記錄,所以我維護一張表來存儲與昏迷同列的所有指定。

通過使用服務,如果用戶通ID = 1個指定=「‘顯影劑’,‘techlead’」,那麼需要拉上述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結合,如:

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

上面的例子將返回empid EQU所有行包含venkatvasu的als 1和empname

顯然您需要根據用戶的輸入創建該查詢,這只是最終查詢應該如何的一個示例。

編輯:嘗試在SqlServer中執行此操作可能會非常困難,因此您應該真正改變您的方式以調用存儲過程。如果你不能這樣做,那麼你可以嘗試並在,上分割你的designation參數(對this question的回答顯示瞭如何做到這一點的幾種方法)並將這些值插入臨時表中。然後,您可以在this article中描述的LIKE這個臨時表上JOIN

+0

我們不需要硬編碼。如果用戶傳遞id = 1和desigantion =''developer','tester','techlead','projectlead'「就像傳遞多個參數一樣。那麼需要拉開發者,測試人員,techlead,projectlead記錄與傳遞ID匹配...... – user1237131 2012-04-01 07:04:45

+0

@ user1237131:當然,您需要根據用戶的輸入創建該查詢,這只是最終查詢應該如何的一個示例。 – ChrisWue 2012-04-01 07:08:02

+0

嗨可以ü請檢查我的SP,並請更改此.. – user1237131 2012-04-01 07:17:08