2013-07-10 3 views
2

입력을 기반으로 레코드를 반환하는 저장 프로 시저를 만들려고합니다. 모든 입력 매개 변수가 null 인 경우에, 다른 기록 매개 변수를 사용하고 반환, 전체 테이블을 반환 :이 절차를 만드는 것은 "문맥에 지정된 부울이 아닌 유형의 표현 동안SQL에서 null/not null 매개 변수를 기반으로 where 절을 빌드

create procedure getRecords @parm1 varchar(10) = null, @parm2 varchar(10) = null, @parm3 varchar(10) = null 
as 
declare @whereClause varchar(500) 
set @whereClause = ' where 1 = 1 ' 

if (@parm1 is null and @parm2 is null and @parm3 is null) 
    select * from dummyTable 
else 
    begin 
     if (@parm1 is not null) 
     set @whereClause += 'and parm1 = ' + '' + @parm1 + '' 
     if (@parm2 is not null) 
     set @whereClause += 'and parm2 = ' + '' + @parm2 + '' 
     if (@parm3 is not null) 
     set @whereClause += 'and parm3 = ' + '' + @parm3 + '' 

     select * from dummyTable @whereClause <-- Error 
    end 

오류를 어디 조건 "

제 접근법이 where 절을 작성하는 데 잘못 되었다면 의견을주십시오.

감사

+0

왜 당신이 기대'dummyTable SELECT * FROM '1 = 1''쿼리로 모두 동일한에있을를'dummyTable SELECT * FROM WHERE 1 = 1'? 하나는 문자열을 마지막에 무엇을하고 앉아 있었나요? 'SELECT'* FROM dummyTable '이'SELECT 'Hello World''와 다르게 처리 할 것으로 기대하십니까? – MatBailie

+0

엔진을 지정하십시오. – Sebas

답변

5

은 전체 쿼리는 VARCHAR에 있어야하고 "EXEC"기능을 사용하여 실행할 수 있습니다.

SET @query = "SELECT * FROM dummyTable WHERE 1=1 " 

... your IF clauses ... 

EXEC(@query) 

HTH.

0

이 같은 시도 :

create procedure getRecords @parm1 varchar(10) = null, @parm2 varchar(10) = null, @parm3 varchar(10) = null 
as 
declare @whereClause varchar(500) 
declare @sql varchar(500) 

set @sql = 'select * from dummyTable ' 
set @whereClause = ' where 1 = 1 ' 

if (@parm1 is null and @parm2 is null and @parm3 is null) 
    set @sql = @sql + @whereClause 
else 
    begin 
set @sql = @sql + @whereClause 
     if (@parm1 is not null) 
     set @sql = @sql + ' and parm1 = ' + '' + @parm1 + '' 
     if (@parm2 is not null) 
     set @sql = @sql + ' and parm2 = ' + '' + @parm2 + '' 
     if (@parm3 is not null) 
     set @sql = @sql + ' and parm3 = ' + '' + @parm3 + '' 
    end 

exec (@sql) 
7
select * from dummyTable 
where (parm1 = @parm1 OR @parm1 IS NULL) 
    and (parm2 = @parm2 OR @parm2 IS NULL) 
    and (parm3 = @parm3 OR @parm3 IS NULL) 
    ; 
+0

고마워, 정확히 내가 무엇을 찾고있다. – VivekDev

+0

(@ param1이 null이거나 param1 = @ param1)을 사용할 수 있습니까? –

관련 문제