I have a stored procedure like this:
declare @where nvarchar(max)
set @where=' where 1=1 '
if(@IsSimNha is not null)
set @where+=' and s.IsSimNha=@IsSimNha'
if(@IsSearchSimPSC is not null)
set @where+=' and s.HanPhaiPhatSinhLai<=@HanPhaiPhatSinhLai'
if(@GiaTu is not null)
set @where+=' and s.AgentPrice>=@GiaTu'
if(@GiaDen is not null)
set @where+=' and s.AgentPrice<=@GiaDen'
if(@AgentID is not null)
set @where+=' and s.AgentId=@AgentID'
if(@NhaMangId is not null)
set @where+=' and s.NhaMangId=@NhaMangId'
if(@TinhTrangID is not null)
set @where+=' and s.StatusId=@TinhTrangID'
if(@NgayNhapTu is not null)
set @where+=' and s.NgayNhapSim>=@NgayNhapTu'
if(@NgayNhapDen is not null)
set @where+=' and s.NgayNhapSim<=@NgayNhapDen'
if(@NgayPscTu is not null)
set @where+=' and s.NgayPhatSinhCuoc>=@NgayPscTu'
if(@NgayPscDen is not null)
set @where+=' and s.NgayPhatSinhCuoc<=@NgayPscDen'
if(@HanPSCTu is not null)
set @where+=' and s.HanPhaiPhatSinhLai>=@HanPSCTu'
if(@HanPSCDen is not null)
set @where+=' and s.HanPhaiPhatSinhLai<=@HanPSCDen'
if(@HanSuDungTu is not null)
set @where+=' and s.HanSuDung>=@HanSuDungTu'
if(@HanSuDungDen is not null)
set @where+=' and s.HanSuDung<=@HanSuDungDen'
if(@SoSeri is not null)
set @where+=' and s.SoSeri<=@SoSeri'
if(@Lenght is not null)
set @where+=' and LEN(s.Number) = @Lenght'
if(@SearchDau is not null)
set @where+=' and s.Number like @SearchDau+''%'''
if(@SearchGiua is not null)
set @where+=' and s.Number like ''%''+@SearchGiua+''%'''
if(@SearchCuoi is not null)
set @where+=' and s.Number like ''%''+@SearchCuoi'
set @sql = 'declare @TotalItemCount int;'
set @sql+= ' select @TotalItemCount=count(1)
from sims s with (NOLOCK) '
+@where
set @sql+=' select @TotalItemCount TotalItemCount, s.SimId,s.Number, s.DisplayNumber, s.AgentId,ag.Email,ag.Mobile2,s.NhaMangId,s.StatusId,s.SalelPrice,
s.SaleOffPrice,s.Commisions,s.AgentPrice,s.HoaHong,s.IsShow,s.DateCreated,ag.AgentName,s.SoSeri,s.SimTypeId,
s.NgayPhatSinhCuoc,s.HanPhaiPhatSinhLai,s.MaCaNhan,s.SoPhatSinhCuoc,s.HanSuDung,s.GhiChu,s.SoTienCamKet,s.SoThangCamKet,
s.NgayKichHoat, s.NgayNhapSim,s.IsSimNha,s.CoHoTroTraGop,s.GhiChuTraGop,s.ViTriId
from sims s with (NOLOCK) left join Agents ag with (NOLOCK) on s.AgentID=ag.AgentID ' +@where
declare @orderbysql nvarchar(max);
if(@OrderBy='SalelPrice')
begin
if(@SortBy=1)
set @orderbysql= N' ORDER BY s.SalelPrice asc '
else set @orderbysql= N' ORDER BY s.SalelPrice desc '
end
else if(@OrderBy='SaleOffPrice')
begin
if(@SortBy=1)
set @orderbysql= N' ORDER BY s.SaleOffPrice asc '
else set @orderbysql= N' ORDER BY s.SaleOffPrice desc '
end
else if(@OrderBy='AgentPrice')
begin
if(@SortBy=1)
set @orderbysql= N' ORDER BY s.AgentPrice asc '
else set @orderbysql= N' ORDER BY s.AgentPrice desc '
end
else if(@OrderBy='NgayPSC')
begin
if(@SortBy=1)
set @orderbysql= N' ORDER BY s.NgayPSC asc '
else set @orderbysql= N' ORDER BY s.NgayPSC desc '
end
else if(@OrderBy='HanPhatSinhCuoc')
begin
if(@SortBy=1)
set @orderbysql= N' ORDER BY s.HanPhatSinhCuoc asc '
else set @orderbysql= N' ORDER BY s.HanPhatSinhCuoc desc '
end
else if(@OrderBy='HanSuDung')
begin
if(@SortBy=1)
set @orderbysql= N' ORDER BY s.HanSuDung asc '
else set @orderbysql= N' ORDER BY s.HanSuDung desc '
end
else if(@OrderBy='NgayNhapSim')
begin
if(@SortBy=1)
set @orderbysql= N' ORDER BY s.NgayNhapSim asc '
else set @orderbysql= N' ORDER BY s.NgayNhapSim desc '
end
else if(@OrderBy='Number')
begin
if(@SortBy=1)
set @orderbysql= N' ORDER BY s.Number asc '
else set @orderbysql= N' ORDER BY s.Number desc '
end
else if(@OrderBy='TenDaiLy')
begin
if(@SortBy=1)
set @orderbysql= N' ORDER BY s.TenDaiLy asc '
else set @orderbysql= N' ORDER BY s.TenDaiLy desc '
end
else if(@OrderBy='SoSeri')
begin
if(@SortBy=1)
set @orderbysql= N' ORDER BY s.SoSeri asc '
else set @orderbysql= N' ORDER BY s.SoSeri desc '
end
else
begin
if(@SortBy=1)
begin
if(@IsSimNha=1)
set @orderbysql= N' ORDER BY s.HanPhatSinhCuoc asc '
else set @orderbysql= N' ORDER BY s.SimId asc '
end
else
begin
if(@IsSimNha=1)
set @orderbysql= N' ORDER BY s.HanPhatSinhCuoc desc '
else set @orderbysql= N' ORDER BY s.SimId desc '
end
end
set @orderbysql+=' OFFSET (@PageNum-1)* @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY'
set @sql+=@orderbysql
print @sql
EXEC sp_executesql @sql,N'@IsSimNha bit,@IsSearchSimPSC bit, @HanPhaiPhatSinhLai datetime,@GiaTu decimal(18,0),@GiaDen decimal(18,0),@NhaMangId int,@AgentID int,
@TinhTrangID int,@NgayNhapTu datetime,@NgayNhapDen datetime,@NgayPscTu datetime,@NgayPscDen datetime,@HanPSCTu datetime,@HanPSCDen datetime,@HanSuDungTu datetime,
@HanSuDungDen datetime,@SoSeri nvarchar(30),@Lenght int,@SearchDau nvarchar(30),@SearchGiua nvarchar(30),@SearchCuoi nvarchar(30),@PageNum int,@PageSize int ',@IsSimNha ,@IsSearchSimPSC , @HanPhaiPhatSinhLai ,@GiaTu ,@GiaDen,@NhaMangId ,@AgentID ,
@TinhTrangID ,@NgayNhapTu ,@NgayNhapDen ,@NgayPscTu ,@NgayPscDen ,@HanPSCTu ,@HanPSCDen ,@HanSuDungTu ,
@HanSuDungDen ,@SoSeri ,@Lenght ,@SearchDau ,@SearchGiua ,@SearchCuoi,@PageNum,@PageSize
It takes more than 3 seconds to complete.
But when I take script result to run like this:
select
@TotalItemCount TotalItemCount, s.SimId,s.Number, s.DisplayNumber,
s.AgentId, ag.Email, ag.Mobile2, s.NhaMangId, s.StatusId, s.SalelPrice,
s.SaleOffPrice, s.Commisions, s.AgentPrice, s.HoaHong, s.IsShow,
s.DateCreated, ag.AgentName, s.SoSeri, s.SimTypeId,
s.NgayPhatSinhCuoc, s.HanPhaiPhatSinhLai, s.MaCaNhan, s.SoPhatSinhCuoc,
s.HanSuDung, s.GhiChu, s.SoTienCamKet, s.SoThangCamKet,
s.NgayKichHoat, s.NgayNhapSim, s.IsSimNha, s.CoHoTroTraGop,
s.GhiChuTraGop, s.ViTriId
from
sims s with (NOLOCK)
left join
Agents ag with (NOLOCK) on s.AgentID = ag.AgentID
where
s.Number like '0973688639'+'%'
order by
s.SimId desc
OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY
and runs, it's take only 0.02s
I don't know why it's slow like that.
Note: @sql variable = second script.
Somebody can help me?
Thanks all