PDA

View Full Version : [ASK-msSQL]Keanehan pada SP


Permenkaret
20th November 2011, 12:25 PM
gan ane mau tanya dnk



ane ada SP :


Spoiler for SP:







Code:

ALTER PROCEDURE [dbo].[PmyProc]

(
@grup varchar(50) = NULL,
@branch varchar(50) = NULL,
@tahun varchar(3) = NULL,
@obj VARCHAR(4) = NULL
)
AS
SET NOCOUNT ON

IF @branch = '' OR @branch = '0000'
BEGIN
SET @grup = NULL
END

IF @grup = ''
BEGIN
SET @grup = NULL
END

IF @tahun = ''
BEGIN
SET @tahun = NULL
END

SELECT distinct c.xx, c.xx2
FROM dbo.tbl1 (NOLOCK) a
INNER JOIN dbo.tbl2 (NOLOCK) b ON a.dealer = b.dealer AND a.cabang = b.cabang
INNER JOIN dbo.tbl3 (NOLOCK) c ON c.xx = b.xx
LEFT OUTER JOIN dbo.tbl4 (NOLOCK) d ON b.dealer = d.dealer AND b.cabang = d.cabang
LEFT OUTER JOIN dbo.tbl5 (NOLOCK) e ON d.grup = e.grup
WHERE a.f4 = 1
AND
(
@Grup IS NULL
Or (e.Grup = @Grup AND e.f5 = 1 AND d.f6 = 1)
Or b.dealer = @Grup
)
AND
(
@branch IS NULL
Or b.cabang = @branch
)
AND
(
@tahun IS NULL
Or b.tahun = @tahun
)
AND
(
@obj IS NULL
Or b.obj = @obj
)











trus ane jalankan dengan parameter




Code:

exec myProc @branch='0000',@Group='JA20',@Obj='001',@tahun='20 11'

setelah ane jalankan dengan code diatas, jasil querynya baru keluar setelah 40 detik an



Sedangkan dengan parameter yg sama, ane jalankan isi dari SP diatas secara langsung tanpa pake SP dengan paramter yang sama... hasil nya lsg keluar setelah 0-1 detik



query yang ane pake :


Spoiler for query:







Code:

Declare @HQBranchID VARCHAR(50),
@GroupID VARCHAR(50),
@ObjectCode VARCHAR(3),
@YearPoint VARCHAR(4)

SET @branch= '0000'
SET @Group = 'JA20'
SET @Obj = '001'
SET @tahun = '2011'


SET NOCOUNT ON

IF @branch = '' OR @branch = '0000'
BEGIN
SET @grup = NULL
END

IF @grup = ''
BEGIN
SET @grup = NULL
END

IF @tahun = ''
BEGIN
SET @tahun = NULL
END


SELECT distinct c.xx, c.xx2
FROM dbo.tbl1 (NOLOCK) a
INNER JOIN dbo.tbl2 (NOLOCK) b ON a.dealer = b.dealer AND a.cabang = b.cabang
INNER JOIN dbo.tbl3 (NOLOCK) c ON c.xx = b.xx
LEFT OUTER JOIN dbo.tbl4 (NOLOCK) d ON b.dealer = d.dealer AND b.cabang = d.cabang
LEFT OUTER JOIN dbo.tbl5 (NOLOCK) e ON d.grup = e.grup
WHERE a.f4 = 1
AND
(
@Grup IS NULL
Or (e.Grup = @Grup AND e.f5 = 1 AND d.f6 = 1)
Or b.dealer = @Grup
)
AND
(
@branch IS NULL
Or b.cabang = @branch
)
AND
(
@tahun IS NULL
Or b.tahun = @tahun
)
AND
(
@obj IS NULL
Or b.obj = @obj
)













Yang menyebabkan SP lama adalah


Code:

@branch IS NULL
Or b.cabang = @branch

karena nilai @Branch adalah '0000'



maka dari query diatas nilai @branch ane diset menjadi null



bagian inilah yg menyebabkan SP ane menjadi lama



pertanyaan yg ingin nyubi tanyakan adalah :



kenapa pas di SP, hasil baru keluar setelah 40an detik

sedang pada query langsung, hasil sudah keluar dalam waktu kurang dari 1 detik

</div>