【发布时间】:2015-08-23 12:30:13
【问题描述】:
我有一个存储过程,我必须在其中加入 10 个表并使用WHERE 条件根据存储过程中传递的参数过滤记录。例如:
create procedure proc1
@var1 varchar(100) = null,
@var2 varchar(100) = null,
@var3 varchar(100) = null,
@var4 varchar(100) = null,
........
@var10 varchar(100) = null
as
begin
insert into #a
select * from
(
select * from
tab1 as a
inner join tab2 as b on a.rollnumber = b.rollnumber
inner join tab3 as c on c.city = b.city
........
inner join tab10 as j on J.id = i.id
where
a.id = isnull(@var1,a.id) and
b.id = isnull(@var2,b.id) and
c.id = isnull(@var3,c.id) and
...........
J.id = isnull(@var10,j.id)
) as abc
if (select count(*) from #a) < 10
begin
select * from #a
end
else
begin
print 'Cannot display the records as count is more than 10'
end
end
上面的存储过程运行良好,但是速度很慢,因为WHERE 子句中有10 个条件。如果某些参数未提供给存储过程,我想要的是跳过条件。例如,如果只有 3 个参数传递给存储过程,则 WHERE 子句应跳过 WHERE 子句中的其余参数。这将使程序更有效率。所以,如果@var1没有被传递,那么a.id的所有值都应该被返回。
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql