【问题标题】:How to compare multiple parameters of a row column value?如何比较一个行列值的多个参数?
【发布时间】:2012-04-01 06:48:28
【问题描述】:

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

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

【问题讨论】:

    标签: sql-server-2008 stored-procedures


    【解决方案1】:

    您需要将布尔运算符 AND 和 OR 与 LIKE 结合使用:

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

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

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

    编辑:尝试在 SqlServer 中执行此操作可能非常困难,因此您应该真正改变调用存储过程的方法。如果你不能这样做,那么你可以尝试在, 上拆分你的designation 参数(this question 的答案显示了如何做到这一点的几种方法)并将值插入到临时表中。然后你可以在这个临时表上使用LIKE JOIN,如this article 中所述。

    【讨论】:

    • 我们不需要硬编码。如果用户通过 id=1 和 desigantion="'developer','tester','techlead','projectlead'" 这样传递多个参数。然后需要拉取与传递id匹配的developer,tester,techlead,projectlead记录......
    • @user1237131:当然,您需要根据用户的输入来创建查询,这只是最终查询的示例。
    • 如何为假设有 5 个用户动态编写 empname LIKE '%venkat%' OR empname LIKE '%vasu%' 那么如何?假设有 10 个。请告诉我?
    • 谢谢@Chris。我得到了解决方案
    猜你喜欢
    • 1970-01-01
    • 2015-12-21
    • 2018-05-16
    • 1970-01-01
    • 2019-03-19
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多