如何比较行列值的多个参数?

时间:2012-04-01 06:48:28

标签: sql-server-2008 stored-procedures

如何为以下请求编写查询? 我的桌子:

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

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

然后需要第一,第二记录。因为2行有venkat。 如果id=1,designation="'developer','techlead'"则需要获得3条记录。 我写了一个服务,用于将记录插入到该表中。所以我维护一个表来存储所有带有逗号的相同列的名称。

使用服务如果用户传递id = 1 designation =“'developer','techlead'”则需要提取上述3条记录。因此我只保留一个表来保存所有名称

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 id=@id  AND designation IN (select id1 from #u1)
  END

1 个答案:

答案 0 :(得分:3)

您需要将布尔运算符AND和OR与LIKE:

结合使用
IF empid = 1 AND (empname LIKE '%venkat%' OR empname LIKE '%vasu%')

以上示例将返回empid等于1且empname包含venkatvasu的所有行。

显然,您需要根据用户的输入创建该查询,这只是最终查询应该如何显示的示例。

编辑:尝试在SqlServer中执行此操作可能非常困难,因此您应该真正更改调用存储过程的方法。如果您无法执行此操作,那么您可以尝试将designation参数拆分为,this question的答案显示了如何执行此操作的几种方法)并将值插入到临时表。然后,您JOIN可以LIKE使用{{1}} {{1}} {{1}}。{/}