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)这样结构,看得眼镜都绿了】 展开
@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)这样结构,看得眼镜都绿了】 展开
4个回答
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 + '%'
追答
你调用存储过程, 传递的参数是什么?
展开全部
--给你参考一下
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
)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
@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) 了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不太可能,一个是sql语句,一个是变量,怎么合起来?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询