我有一个下拉列表,其中包含所有客户名称作为复选框。用户可以选中该框以选择多个客户。我还有一个文本框,用户可以在其中输入客户名称。如果用户从下拉列表中选择客户 A、B、C 并且没有在文本框中输入任何内容,则结果应显示 A、B、C。如果用户从下拉列表中选择 A、B、C 并在文本框中输入 A,则该语句应检查是否在下拉列表中也选择了 A,结果应仅为 A。这是我的 SQL 语句。目前,如果我选择 A、B、C 并输入 A,它仍然给我 A、B、C。如果我选择 A,B,C 并输入 A,如何更改它,它应该只给我 A。@CLIST 以逗号作为分隔符保存 A,B,C。@CNAME 持有用户键入的 A。
SELECT DISTINCT A.ID, A.NAME, A.DID
INTO #TMPTBL
FROM MY_LIST A (NOLOCK)
WHERE (@CLIST = '' AND (@CNAME='' OR (A.ID + A.NAME) like '%'+@CNAME+'%'))
OR (A.ID in (SELECT ListItem FROM GetSplitList(',',@CLIST)))
您的逻辑有缺陷,对于您需要检查的每个参数 @param = '' OR @param is-match
SELECT DISTINCT
A.ID, A.NAME, A.DID
INTO #TMPTBL
FROM MY_LIST A
WHERE (
@CNAME = '' OR
A.ID + A.NAME LIKE '%' + @CNAME + '%'
) AND (
@CLIST = '' OR
A.ID IN (SELECT ListItem FROM GetSplitList(',',@CLIST))
);
旁注:
不要用 乱写你的代码NOLOCK
,这不是一个更快的开关
考虑使用表值参数而不是逗号分隔的列表
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句