Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于sql中的null/notnull参数构建where子句_Sql_Sql Server_Stored Procedures - Fatal编程技术网

基于sql中的null/notnull参数构建where子句

基于sql中的null/notnull参数构建where子句,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我正在尝试创建一个存储过程,它将根据输入返回记录。如果所有输入参数都为空,则返回整个表,否则使用参数并返回记录: 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 (@pa

我正在尝试创建一个存储过程,它将根据输入返回记录。如果所有输入参数都为空,则返回整个表,否则使用参数并返回记录:

 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
创建过程getRecords@parm1 varchar(10)=null、@parm2 varchar(10)=null、@parm3 varchar(10)=null
作为
声明@where子句varchar(500)
设置@whereClause='where 1=1'
如果(@parm1为空,@parm2为空,@parm3为空)
从dummyTable中选择*
其他的
开始
如果(@parm1不为空)
设置@whereClause+='和parm1='+'+'+@parm1+''
如果(@parm2不为空)
设置@whereClause+='和parm2='+'+'+@parm2+''
如果(@parm3不为空)
设置@whereClause+='和parm3='+''+'@parm3+''

从dummyTable@whereClause中选择*整个查询应该在varchar中,并且可以使用“EXEC”函数执行

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

... your IF clauses ...

EXEC(@query)

嗯。

试试这样的方法:

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)

为什么您希望
SELECT*FROM-dummyTable'WHERE 1=1'
与查询
SELECT*FROM-dummyTable'WHERE 1=1
?一根绳子放在一端做什么?您是否希望
选择“*FROM dummyTable”
执行与
选择“Hello World”
不同的操作?请指定您的引擎。谢谢,这正是我想要的。我可以使用(@param1为null或param1=@param1)吗?
select * from dummyTable
where (parm1 = @parm1 OR @parm1 IS NULL)
  and (parm2 = @parm2 OR @parm2 IS NULL)
  and (parm3 = @parm3 OR @parm3 IS NULL)
  ;