在这个函数中,我调用了一个存储过程,并在SQL Management Studio中对其进行了测试,它运行良好且快速(0.2秒)。
请帮我找一个解决方案。提前致谢! 这是我的存储过程:
CREATE proc [dbo].[SPChiTietKeHoachGiao] (@makhg nvarchar(15))
as
begin
declare @ngay datetime, @thang int, @nam int,
@ngay1 datetime, @thang1 int, @nam1 int,
@ngay2 datetime, @thang2 int, @nam2 int,
@ngay3 datetime, @thang3 int, @nam3 int,
@ngay4 datetime, @thang4 int, @nam4 int
-- Lay tinh hinh tieu thu cua thang truoc
select top 1
@ngay=dateadd(month, -1,Thang)
from KeHoachGiao
where MaKeHoachGiao = @makhg
set @thang = month(@ngay)
set @nam = year(@ngay)
set @ngay1=dateadd(MONTH,-1,@ngay)
set @ngay2=dateadd(MONTH,-1,@ngay1)
set @ngay3=dateadd(MONTH,-1,@ngay2)
set @ngay4=dateadd(MONTH,-1,@ngay3)
set @thang1=month(@ngay1)
set @nam1=year(@ngay1)
set @thang2=month(@ngay2)
set @nam2=year(@ngay2)
set @thang3=month(@ngay3)
set @nam3=year(@ngay3)
set @thang4=month(@ngay4)
set @nam4=year(@ngay4)
select ct.MaSP,
TenSP,
xuatkho4.TieuThuTrongThang4,
xuatkho3.TieuThuTrongThang3,
xuatkho2.TieuThuTrongThang2,
xuatkho1.TieuThuTrongThang1,
(
ISNULL ( TieuThuTrongThang4, 0 )
+ISNULL ( TieuThuTrongThang3, 0 )
+ISNULL ( TieuThuTrongThang2, 0 )
+ISNULL ( TieuThuTrongThang1, 0 ) ) / 4 TTBQ,
TonDauKy,
NhapKhoTrongThang,
xuatkho.TieuThuTrongThang,
TonCuoiKy,
case KeHoachSanXuat
when 0 then null else KeHoachSanXuat end KeHoachSanXuat,
KeHoachSanXuat * DinhMuc / 1000000 SanLuong,
case SoLuongDaNhap
when 0 then null else SoLuongDaNhap end SoLuongDaNhap,
case isnull( KeHoachSanXuat, 0 )
when 0 then null
else 100 * SoLuongDaNhap / isnull ( KeHoachSanXuat, 100) end TiLeHoanThanh
from (
select * from ChiTietKeHoachGiao where makehoachgiao = @makhg) ct
inner join
(
select masp
, tensp
, stt
, MaLoai
, DinhMuc
from SanPham
) sp
ON ct.MaSP = sp.MaSP
left join
(
select ctpx.MaSP
, SUM( ctpx.SoLuong ) TieuThuTrongThang
from
(
select * from PhieuXuatKho
where MONTH(NgayXuat)= @thang
and YEAR(NgayXuat) = @nam
) pxk
inner join ChiTietXuatKho ctpx
on pxk.MaPhieuXuat = ctpx.MaPhieuXuat
group by ctpx.MaSP
) xuatkho
on sp.MaSP = xuatkho.MaSP
left join
(
select ctpx.MaSP
, sum(ctpx.SoLuong) TieuThuTrongThang1
from
( select * from PhieuXuatKho
where MONTH(NgayXuat) = @thang1
and YEAR ( NgayXuat) = @nam1
) pxk
inner join ChiTietXuatKho ctpx
on pxk.MaPhieuXuat = ctpx.MaPhieuXuat
group by ctpx.MaSP
) xuatkho1
on sp.MaSP = xuatkho1.MaSP
left join
(
select ctpx.MaSP
, sum ( ctpx.SoLuong ) TieuThuTrongThang2
from
(
select * from PhieuXuatKho
where MONTH ( NgayXuat) = @thang2
and YEAR ( NgayXuat)= @nam2
) pxk
inner join ChiTietXuatKho ctpx
on pxk.MaPhieuXuat = ctpx.MaPhieuXuat
group by ctpx.MaSP
) xuatkho2
on sp.MaSP = xuatkho2.MaSP
left join
(
select ctpx.MaSP
, sum ( ctpx.SoLuong ) TieuThuTrongThang3
from
(
select * from PhieuXuatKho
where MONTH ( NgayXuat ) = @thang3
and YEAR ( NgayXuat ) = @nam3
) pxk
inner join ChiTietXuatKho ctpx
on pxk.MaPhieuXuat = ctpx.MaPhieuXuat
group by ctpx.MaSP
) xuatkho3
on sp.MaSP = xuatkho3.MaSP
left join
(
select ctpx.MaSP
, sum(ctpx.SoLuong) TieuThuTrongThang4
from
(
select * from PhieuXuatKho
where MONTH(NgayXuat) = @thang4
and YEAR(NgayXuat) = @nam4
) pxk
inner join ChiTietXuatKho ctpx
on pxk.MaPhieuXuat = ctpx.MaPhieuXuat
group by ctpx.MaSP
) xuatkho4
on sp.MaSP = xuatkho4.MaSP
inner join
(
select maloai
, tenloai
from loaisanpham
) loai
on sp.maloai = loai.maloai
order by loai.tenloai
, sp.STT
end
答案 0 :(得分:0)
我曾经遇到过这样的问题,解决方法是重新编译SP。 您可以通过在参数声明和 AS 关键字之间添加 WITH RECOMPILE 或使用sp_recompile SP来执行此操作。希望这有帮助