如何在SQL Server存储过程中执行条件

时间:2016-12-15 16:47:39

标签: sql-server-2008 sql-server-2005

我有一个存储过程,我需要在其中实现条件WHERE子句。

我有一个@name参数,@startdate@enddate个参数。

我该如何写条件:

  • 如果@name is null@startdate&然后给出@enddate返回日期范围的数据。
  • 如果@name被给予@startdate& @enddate is null然后返回名称
  • 的数据
  • 如果@name@startdate&然后给出@enddate返回数据,其中评估名称日期范围

这是我目前的程序

alter procedure dbo.sp_emp
     @name varchar(50),
     @startdate date,
     @enddate date
as 
begin
    select * 
    from employee 
    where 
        Name = @name 
        and dob between @startdate and @enddate
end

2 个答案:

答案 0 :(得分:1)

我认为COALESCE可以解决您的问题。

alter procedure dbo.sp_emp
@name varchar(50),
@startdate date,
@enddate date
as 
begin
select * 
from employee 
where Name = (COALESCE(@name, name))
  AND dob between COALESCE(@startdate, dob) and COALESCE(@enddate, dob)
end

ISNULL版

alter procedure dbo.sp_emp
@name varchar(50),
@startdate date,
@enddate date
as 
begin
select * 
FROM employee 
WHERE Name = ISNULL(@name, name)
  AND dob between ISNULL(@startdate, dob) AND ISNULL(@enddate, dob)
end

答案 1 :(得分:0)

你可以这样做:

DECLARE @query NVARCHAR(2048);

SET @query = 'select * from employee where Name = ''' + @name + '''';

IF @startdate IS NOT NULL AND @enddate IS NOT NULL
     SET @query += ' AND dob between ''' + @startdate + ''' and ''' + @enddate '''';

EXECUTE(@query);

你应该关心你的关于SQL注入的变种。