我有一个存储过程,我需要在其中实现条件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
答案 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注入的变种。