sql,用2005这存储过程应该怎么写

来源:百度知道 编辑:UC知道 时间:2024/05/28 13:42:08
@ResumeState1
@ResumeState2
是传进来的参数,State是字段名
select * from SearchView
where 1=1

if(@ResumeState1='山西') where后面就加 and State = 1
if(@ResumeState2='山东') where后面就加 and State = 2
对对,我就是要
select * from SearchView where 1=1 and state=1 and state=2
这种结果 。但是,数据库是2005的不用拼接,我就是不知道不拼接的时候怎么写,(不是2000啊)
如果不是拼接的话
select * from SearchView where 1=1 @wherestr and ....
会报错的

CREATE PROC YourProcName
@ResumeState1 VARCHAR(20),
@ResumeState2 VARCHAR(20)
AS
begin
declare @sqlstr varchar(254)
declare @wherestr varchar(20)
set wherestr = ''
if @ResumeState1='山西'
set @wherestr = @wherestr + ' and state=1'
if @ResumeState2='山东'
set @wherestr = @wherestr + ' and state=2'
set @sqlstr = 'select * from SearchView where 1=1'+@wherestr
exec(@sqlstr)
end

你的逻辑有点乱啊,找你这样就有可能执行成这样了:
select * from SearchView where 1=1 and state=1 and state=2

----我的疏忽,临时变量忘记加@ 拼接有什么不好啊?逻辑清楚-----

不拼接字符串:

select * from SearchView where 1=1 and (case when @ResumeState1='山西' then state=1 else 1=1 end) and (case when @ResumeState2='山东' then state=2 else 1=1 end)

CREATE PROC procName
@ResumeState1 VARCHAR(20),
@ResumeState2 VARCHAR(20)
AS
if(@ResumeState1='