我想創建一個存儲過程,它將基於輸入返回記錄。如果所有的輸入參數爲null,則返回整個表,否則使用的參數和返回的記錄:建立where子句基於空/非空參數在sql
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子句?
由於
爲什麼你會想到'SELECT * FROM dummyTable 'WHERE 1 = 1''是在所有同查詢'SELECT * FROM dummyTable其中1 = 1'?一個人在最後做了什麼?你會期望'SELECT'* FROM dummyTable''做什麼不同於'SELECT'Hello World''嗎? – MatBailie
請指定您的引擎。 – Sebas