如何为以下请求编写查询? 我的桌子:
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
答案 0 :(得分:3)
您需要将布尔运算符AND和OR与LIKE:
结合使用IF empid = 1 AND (empname LIKE '%venkat%' OR empname LIKE '%vasu%')
以上示例将返回empid
等于1且empname
包含venkat
或vasu
的所有行。
显然,您需要根据用户的输入创建该查询,这只是最终查询应该如何显示的示例。
编辑:尝试在SqlServer中执行此操作可能非常困难,因此您应该真正更改调用存储过程的方法。如果您无法执行此操作,那么您可以尝试将designation
参数拆分为,
(this question的答案显示了如何执行此操作的几种方法)并将值插入到临时表。然后,您JOIN
可以LIKE
使用{{1}} {{1}} {{1}}。{/}