sql2005 存储过程中where后面的 = 或 like 拼接

createprocup_user@useridchar(20),@usernamechar(20)asdeclare@wherevarchar(1000)set@whe... create proc up_user
@userid char(20),
@username char(20)
as
declare @where varchar(1000)
set @where=''

if(@userid<>'')
set @where=@where+' and userid= '+@userid
if(@username<>'')
set @where=@where+' and username like ''%'+@userid+ '%'' '

begin
select * from tb_user
where 1=1
end

问题:where 1=1 后面如何拼接【不想用@sql=.....然后exec(sql)这样结构,看得眼镜都绿了】
展开
 我来答
匿名用户
2013-07-04
展开全部
create proc up_user
 @userid char(20),
 @username char(20)
as 
BEGIN
  select * from tb_user
  WHERE  
    userid = CASE WHEN @userid <> '' THEN  @userid  ELSE userid END
AND username = LIKE '%' + CASE WHEN @username <> '' THEN  @username  ELSE username END + '%'
END


注:  @userid  <> ''  ,  某些情况下, 可能换成
@userid IS NOT NULL  AND  @userid  <> ''   更好一些。 

@username 也是一样。
更多追问追答
追问
为啥 like 没结果呢?
AND isnull(username,'') LIKE '%' + CASE WHEN @username '' THEN @username ELSE username END + '%'
追答
你调用存储过程,  传递的参数是什么?
ttpsan520
2013-07-04 · TA获得超过404个赞
知道小有建树答主
回答量:312
采纳率:100%
帮助的人:314万
展开全部
--给你参考一下
select * 

from table 

where 1=1
and (1=2
    or @addDate is null -- 未提供参数 @addDate

    or addDate = @addDate -- 或 addDate等于提供的参数@addDate

    )
and (1=2
    or @name = '' -- 未提供参数@name

    or name = @name -- 或 name等于提供的参数@name
    )
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
微风8009
2013-07-04 · TA获得超过304个赞
知道小有建树答主
回答量:251
采纳率:0%
帮助的人:166万
展开全部
create proc up_user
@userid char(20),
@username char(20)
as

if(@userid='') and (@username='')
begin
select * from tb_user
end else
begin
if(@username='')
begin
select * from tb_user
where userid=@userid
end else
if(@userid='')
begin
select * from tb_user
where charindex(@username,username)>0
end else
begin
select * from tb_user
where userid=@userid and charindex(@username,username)>0
end
end
追问
不实际啊  这个只是简单的写下,你这个不好维护的
追答
那就只能 exec(@sql) 了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
射手幽灵伊
2013-07-04 · TA获得超过2716个赞
知道大有可为答主
回答量:4955
采纳率:81%
帮助的人:1971万
展开全部
不太可能,一个是sql语句,一个是变量,怎么合起来?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式