如何使用多个if else语句增加存储过程的性能?

时间:2017-06-13 09:10:07

标签: sql-server tsql stored-procedures

我有一个包含多个if-elseif- else语句的存储过程。当我尝试删除此if elseif语句并仅执行该查询的单个部分时,它会非常快地返回结果,但是当使用if-elseif case语句将此查询与多个其他查询一起使用时,则需要太多时间...

例如:

if @Status = 1
begin
    select .....
end
else if @Status = 2
begin
    select .....
end
else if @Status = 3
begin
    select .....
end
else if....

此存储过程中还有更多else if语句。

2 个答案:

答案 0 :(得分:0)

虽然它可能出现在某些“不要这样做”的书中,但您可以尝试为每个status值创建一个存储过程,并通过构建动态TSQL语句直接调用它("exec yourproc_" + statusValue )。

create proc youproc_1 as 
begin
select your_data_for_status1;
end;

create proc youproc_2 as 
begin
select your_data_for_status2;
end;

等...

答案 1 :(得分:-2)

USE [YourDB]
GO

CREATE PROCEDURE dbo.NameOfStorageProcedure @Status int
AS
if(@Status = 1)
begin
SELECT some 
FROM DB
return 
end

if(@Status = 2)
begin 
SELECT Some 
FROM DB
return 
end 

GO