Ich habe Prozedur wie diese gespeichert. Ich schreibe Körper des Verfahrens es hat zu viele Parameter und ich habe viel Kontrolle für checking Lageraktivitäten. Und es wird riesig und ich kann es nicht kontrollieren. Was ist der beste Ansatz, um dies zu optimieren?Optimieren sehr lange gespeicherte Prozedur
DECLARE @ORDERFICHEREF INT =488
DECLARE @STFICHEREF INT =560
DECLARE @CLIENTREF INT =608
DECLARE @BARCODE VARCHAR(50)='1536011000010'
DECLARE @ISPARTIAL BIT=0
DECLARE @TERMINALREF INT=1
DECLARE @PARAMETERREF INT=0
DECLARE @PARTIALAMOUNT FLOAT=1
DECLARE @PARTIALUOMREF INT=59
DECLARE @PARTIALCONVFACT1 INT =1
DECLARE @PARTIALCONVFACT2 INT =50
DECLARE @RESULT INT
DECLARE @FICHENO VARCHAR(20)
DECLARE @STATUS SMALLINT
DECLARE @BRANCH SMALLINT
DECLARE @SOURCEINDEX SMALLINT
DECLARE @BARCODEREF INT
DECLARE @ITEMREF INT
DECLARE @VARIANTREF INT
DECLARE @USREF INT
DECLARE @UOMREF INT
DECLARE @CONVFACT1 FLOAT
DECLARE @CONVFACT2 FLOAT
DECLARE @LSTAMOUNT FLOAT
DECLARE @USELABELUNITA INT
DECLARE @CHECKTYPE INT
DECLARE @ISEAN BIT
DECLARE @BARCODESPECODE VARCHAR(50)
DECLARE @PRICE FLOAT
SET @ISEAN=0
SET @CHECKTYPE =-1
SET @RESULT=0
DECLARE @SHIPINFOREF INT
SELECT @FICHENO =ORF.FICHENO,@STATUS=ORF.[STATUS],@BRANCH=ORF.BRANCH,@SOURCEINDEX=ORF.SOURCEINDEX
FROM ORDERFICHE ORF
INNER JOIN ORDERFICHE_TERMINAL ORFT ON ORF.LOGICALREF=ORFT.ORDERFICHEREF
WHERE [email protected] AND [email protected]
IF (@STATUS IS NULL OR (@STATUS NOT IN (0,1,6)))
BEGIN
SET @RESULT=14 --Fişe terminal atanmış ve fiş statusu tamamlandıdan küçük olacak
GOTO RESULT
END
SELECT
@BARCODEREF=LBL.LOGICALREF,
@ITEMREF=LBL.ITEMREF,
@VARIANTREF=LBL.VARIANTREF,
@UOMREF=LBL.UOMREF,
@USREF=LBL.USREF,
@CONVFACT1 = LBL.CONVFACT1,
@CONVFACT2 = LBL.CONVFACT2,
@LSTAMOUNT=SUM(CAST(CAST(STL.AMOUNT*STL.CONVFACT2/STL.CONVFACT1*(2-IOCODE)/ABS(2-IOCODE) AS NUMERIC(28,6)) AS FLOAT)),
@BARCODESPECODE = LBL.SPECODE
FROM LABEL_CARD LBL
LEFT OUTER JOIN STLINE STL ON LBL.LOGICALREF=STL.BARCODEREF AND [email protected] AND [email protected]
WHERE [email protected]
GROUP BY LBL.LOGICALREF,LBL.ITEMREF,LBL.VARIANTREF,LBL.USREF,LBL.UOMREF,LBL.CONVFACT2,LBL.CONVFACT1,LBL.AMOUNT,STL.BRANCH,STL.SOURCEINDEX,LBL.SPECODE
--BARKOD - CARİ,SEVKİYAT ADRES KONTROLU
DECLARE @LABELCLINETREF INT
DECLARE @LABELLGORFICHEREF INT
DECLARE @LABELLGORFLINEREF INT
DECLARE @LABELSHIPINFOREF INT
IF(@BARCODEREF IS NOT NULL AND (SELECT CONVERT(BIT,VALUE) FROM ORDER_PARAMETER WHERE PARAMETERREF=86)=0) --Cari hesap için yazdırılmış etiket farklı cariye satılsın mı?
BEGIN
SELECT @SHIPINFOREF=SHIPINFOREF FROM STFICHE WHERE [email protected]
SELECT @LABELCLINETREF=CLIENTREF,@LABELLGORFICHEREF=LGORFICHEREF,@LABELLGORFLINEREF=LGORFLINEREF,@LABELSHIPINFOREF=SHIPINFOREF
FROM LABEL_CARD_LGREFERENCE WHERE [email protected] AND ISCANCELLED=0
IF(@LABELCLINETREF<>@CLIENTREF)
BEGIN
SET @RESULT=57 -- BAŞKA CARİ İÇİN YAZDIRILMIŞ ETİKET
GOTO RESULT
END
IF (ISNULL(@LABELSHIPINFOREF,0)>0)
BEGIN
IF(ISNULL(@LABELSHIPINFOREF,0)<>ISNULL(@SHIPINFOREF,0))
BEGIN
SET @RESULT=58 -- SEVKİYAT ADRESLERİ FARKLI
GOTO RESULT
END
END
END
IF (@BARCODEREF IS NULL)
BEGIN
DECLARE @EANCHARCOUNT INT
SELECT @EANCHARCOUNT=ISNULL(VALUE,0) FROM ORDER_PARAMETER WHERE PARAMETERREF=60
IF @EANCHARCOUNT>0
BEGIN
SET @BARCODE=LEFT(@BARCODE,@EANCHARCOUNT)
END
SELECT @ITEMREF=UB.ITEMREF,@VARIANTREF=ISNULL(UB.VARIANTREF,0),@UOMREF=UB.UNITLINEREF,@USREF=ITM.UNITSETREF,@CONVFACT1 = IUA.CONVFACT1,@CONVFACT2 =IUA.CONVFACT2
FROM {0}..LG_{1}_UNITBARCODE UB
JOIN {0}..LG_{1}_ITEMS ITM ON ITM.LOGICALREF=UB.ITEMREF
JOIN {0}..LG_{1}_ITMUNITA IUA ON IUA.UNITLINEREF=UB.UNITLINEREF AND IUA.LOGICALREF=UB.ITMUNITAREF AND UB.VARIANTREF=IUA.VARIANTREF
WHERE UB.TYP IN (0,1) AND [email protected]
IF ISNULL(@ITEMREF,0)=0
BEGIN
SET @RESULT=1 -- @ITEMREF NULL GELİYORSA EAN BARKOD YOK --Barkod LABEL_CARD'da ya sa UNITBARCODE da olmalı
GOTO RESULT
END
SET @ISEAN=1
SELECT @CHECKTYPE=CONVERT(INT,VALUE) FROM ORDER_PARAMETER WHERE PARAMETERREF=53
IF(@CHECKTYPE=0)
BEGIN
SELECT @LSTAMOUNT=SUM(CAST(CAST(AMOUNT*CONVFACT2/CONVFACT1*(2-IOCODE)/ABS(2-IOCODE) AS NUMERIC(28,6)) AS FLOAT))
FROM STLINE
WHERE [email protected] AND [email protected] AND [email protected] AND [email protected] AND BARCODEREF IS NULL
END
IF(@CHECKTYPE=1)
BEGIN
SELECT @LSTAMOUNT=SUM(CAST(CAST(AMOUNT*(2.5-IOCODE)/ABS(2.5-IOCODE)*(UINFO2/UINFO1) AS NUMERIC(28,6)) AS FLOAT))
FROM {0}..LG_{1}_{2}_STLINE
WHERE [email protected] AND [email protected] AND [email protected] AND CANCELLED=0 AND LPRODSTAT = 0 AND UINFO1>0 AND UINFO2>0
END
IF((SELECT CONVERT(BIT,VALUE) FROM ORDER_PARAMETER WHERE PARAMETERREF=54)=1)
BEGIN
SET @PARTIALAMOUNT=1
SET @PARTIALUOMREF = @UOMREF
SET @PARTIALCONVFACT1 = @CONVFACT1
SET @PARTIALCONVFACT2 = @CONVFACT2
END
IF(@CHECKTYPE=1)
BEGIN
DECLARE @BACKAMOUNT FLOAT
SELECT @BACKAMOUNT=ISNULL(CAST(CAST(SUM(STL.AMOUNT*STL.CONVFACT2/STL.CONVFACT1) AS NUMERIC(28,6)) AS FLOAT) ,0)
FROM STLINE STL
INNER JOIN ORDERFICHE ORF ON ORF.LOGICALREF=STL.ORDERFICHEREF
WHERE ORF.STATUS<>3 AND STL.IOCODE=4 AND [email protected] AND [email protected] AND BARCODEREF IS NULL AND [email protected]
SET @[email protected]@BACKAMOUNT
END
END
ELSE
BEGIN
--PARAMETEREREF=44
IF((SELECT DBO.FNC_EXPIRATIONDATE (@BARCODEREF,44))=1)
BEGIN
SET @RESULT=46
GOTO RESULT
END
END
IF(@CHECKTYPE<>2)
BEGIN
IF (@LSTAMOUNT IS NULL)
BEGIN
IF @CHECKTYPE=-1 AND EXISTS (SELECT NULL
FROM STLINE
WHERE [email protected] AND (BRANCH<>@BRANCH OR SOURCEINDEX <> @SOURCEINDEX)
GROUP BY BARCODEREF
HAVING SUM(CAST(CAST(AMOUNT*(2-IOCODE)/ABS(2-IOCODE)*(CONVFACT2/CONVFACT1) AS NUMERIC(28,6)) AS FLOAT))>0)
BEGIN
SET @RESULT=55 --Barkod başka bir ambarda
GOTO RESULT
END
IF @CHECKTYPE=0 AND EXISTS (SELECT NULL
FROM STLINE
WHERE [email protected] AND [email protected] AND BARCODEREF IS NULL AND (BRANCH<>@BRANCH OR SOURCEINDEX <> @SOURCEINDEX)
GROUP BY ITEMREF,VARIANTREF,USREF
HAVING SUM(CAST(CAST(AMOUNT*(2-IOCODE)/ABS(2-IOCODE)*(CONVFACT2/CONVFACT1) AS NUMERIC(28,6)) AS FLOAT))>0)
BEGIN
SET @RESULT=55 --Barkod başka bir ambarda
GOTO RESULT
END
IF @CHECKTYPE=1 AND EXISTS (SELECT NULL
FROM {0}..LG_{1}_{2}_STLINE
WHERE [email protected] AND [email protected] AND CANCELLED=0 AND LPRODSTAT = 0 AND UINFO1>0 AND UINFO2>0 AND SOURCEINDEX <> @SOURCEINDEX
GROUP BY STOCKREF,VARIANTREF,USREF
HAVING SUM(CAST(CAST(AMOUNT*(2.5-IOCODE)/ABS(2.5-IOCODE)*(UINFO2/UINFO1) AS NUMERIC(28,6)) AS FLOAT))>0)
BEGIN
SET @RESULT=55 --Barkod başka bir ambarda
GOTO RESULT
END
SET @RESULT=2 --Barkod Stokta olmalı - Girişi yapılmamış ürün
GOTO RESULT
END
IF (@LSTAMOUNT<=0)
BEGIN
IF EXISTS (SELECT 1 FROM STLINE WHERE [email protected]EF AND [email protected])
BEGIN
SET @RESULT=15 --Barkod Stokta olmalı - Mevcut emirde okutulmuş
GOTO RESULT
END
ELSE
BEGIN
SET @RESULT=3 --Barkod Stokta olmalı - Çıkışı yapılmış
GOTO RESULT
END
END
END
IF((@ISPARTIAL=0 OR @ISEAN=1) AND @PARTIALAMOUNT IS NOT NULL)
BEGIN
SET @[email protected]
SET @UOMREF = @PARTIALUOMREF
SET @CONVFACT1 = @PARTIALCONVFACT1
SET @CONVFACT2 = @PARTIALCONVFACT2
END
IF EXISTS (SELECT 1 FROM ORDERLINE WHERE [email protected] AND [email protected])
BEGIN
DECLARE @ORLCOUNT INT
SELECT @USELABELUNITA=USELABELCARDUNITA FROM LABEL_PARAMETERS WHERE LOGICALREF=1
SELECT @ORLCOUNT=COUNT(LOGICALREF) FROM ORDERLINE WHERE [email protected] AND [email protected] AND [email protected] AND USREF = @USREF
IF (ISNULL(@ORLCOUNT,0)=0)
BEGIN
SET @RESULT=13 --ITEMREF emirde olmalı
GOTO RESULT
END
IF (@ISEAN=1 AND ISNULL(@PARTIALAMOUNT,0)=0)
BEGIN
SET @RESULT=11
GOTO RESULT
END
IF(@ISPARTIAL=0 AND @ISEAN=0)
BEGIN
IF NOT EXISTS(SELECT NULL FROM ORDERLINE ORL
INNER JOIN LABEL_CARD_UNITA LBLA ON LBLA.BARCODEREF = @BARCODEREF AND ORL.UOMREF = LBLA.UOMREF
WHERE [email protected] AND [email protected] AND [email protected])
BEGIN
IF @USELABELUNITA=1
BEGIN
SET @RESULT=54 --etiket birim miktarı girilmelidir.
GOTO RESULT
END
END
DECLARE @TOAMOUNT FLOAT
DECLARE @TSAMOUNT FLOAT
SELECT @TOAMOUNT=CAST(CAST(SUM(ORL.AMOUNT*CASE WHEN LCU.LOGICALREF IS NULL THEN CASE WHEN @USELABELUNITA =1 THEN 0 ELSE ORL.CONVFACT2/ORL.CONVFACT1 END ELSE LCU.CONVFACT2/LCU.CONVFACT1 END)AS NUMERIC(28,6)) AS FLOAT)
FROM ORDERLINE ORL
LEFT OUTER JOIN LABEL_CARD_UNITA LCU ON LCU.BARCODEREF = @BARCODEREF AND ORL.UOMREF = LCU.UOMREF
WHERE [email protected] AND [email protected] AND [email protected]
SELECT @TSAMOUNT=CAST(CAST(SUM(STL.AMOUNT*(STL.CONVFACT2/STL.CONVFACT1))AS NUMERIC(28,6)) AS FLOAT)
FROM ORDERLINE ORL
INNER JOIN STLINE STL ON ORL.LOGICALREF = STL.ORDERLINEREF
WHERE [email protected] AND [email protected] AND [email protected]
--Parçalı seri barkod emir miktar aşımı kontrolü için parçalı miktar ana birime çevriliyor.
DECLARE @MAINAMOUNT FLOAT
SET @[email protected]
IF(@ISPARTIAL=0 AND @ISEAN=0 AND @PARTIALAMOUNT IS NOT NULL)
BEGIN
SET @[email protected]*@CONVFACT2/@CONVFACT1
END
--IF (@MAINAMOUNT+ ISNULL(@TSAMOUNT,0)> ISNULL(@TOAMOUNT,0))
IF EXISTS(SELECT * FROM ORDER_PARAMETER WHERE PARAMETERREF=118 AND VALUE=0)
BEGIN
IF (CAST(CAST((ISNULL(@MAINAMOUNT,0)+ISNULL(@TSAMOUNT,0))AS NUMERIC(28,6))AS FLOAT)> ISNULL(CAST(CAST(@TOAMOUNT AS NUMERIC(28,6)) AS FLOAT),0))
BEGIN
SET @RESULT=25 --Emir miktarı aşılmamalı
GOTO RESULT
END
END
END
IF((@ISEAN=1) AND @PARTIALAMOUNT IS NOT NULL)
BEGIN
DECLARE @PTOAMOUNT FLOAT
DECLARE @PTSAMOUNT FLOAT
SELECT @PTOAMOUNT=ORL.AMOUNT,@PTSAMOUNT=CAST(CAST(SUM(STL.AMOUNT*(STL.CONVFACT2/STL.CONVFACT1))AS NUMERIC(28,6)) AS FLOAT) FROM ORDERLINE ORL
LEFT OUTER JOIN STLINE STL ON ORL.LOGICALREF=STL.ORDERLINEREF
WHERE [email protected] AND [email protected] AND [email protected] AND [email protected]
GROUP BY ORL.LOGICALREF,ORL.AMOUNT
IF EXISTS(SELECT * FROM ORDER_PARAMETER WHERE PARAMETERREF=118 AND VALUE=0)
BEGIN
IF(CAST(CAST((@LSTAMOUNT + ISNULL(@PTSAMOUNT,0))AS NUMERIC(28,6))AS FLOAT) > ISNULL(@PTOAMOUNT,0))
BEGIN
SET @RESULT=25 --Emir miktarı aşılmamalı
GOTO RESULT
END
END
END
END
DECLARE @FIFOCONTROL INT
SELECT @FIFOCONTROL=DBO.FNC_ENTRYDATE(@BARCODEREF,@BRANCH,@SOURCEINDEX,@PARAMETERREF)
IF @FIFOCONTROL>0
BEGIN
SET @RESULT=24
GOTO RESULT
END
IF(@ISEAN=0)
BEGIN
DECLARE @ISCOUNTING SMALLINT
SELECT @ISCOUNTING=DBO.FNC_ISCOUNTING(@BRANCH,@SOURCEINDEX,@ITEMREF,@VARIANTREF,@BARCODEREF)
IF (@ISCOUNTING=2) --SAYIMDA OKUTULMAMIS MALZEME
BEGIN
SET @RESULT=21
GOTO RESULT
END
END
IF (@ISPARTIAL=1 OR (@ISEAN=1 AND ISNULL(@PARTIALAMOUNT,0)=0))
BEGIN
SET @RESULT=11 --miktar girilmeli
GOTO RESULT
END
-- HAREKET ÖZEL KODU
DECLARE @SPECODE VARCHAR(50)
IF EXISTS(SELECT * FROM ORDER_PARAMETER WHERE PARAMETERREF=101 AND VALUE=1)
BEGIN
IF (@ISEAN=0)
BEGIN
SET @SPECODE = @BARCODESPECODE
END
ELSE IF (@ISEAN=1)
BEGIN
SET @SPECODE = @EANSPECODE
END
END
DECLARE @ORDERLINEREF INT
DECLARE @DATE DATETIME
SET @ORDERLINEREF=NULL
IF (ISNULL(@ORLCOUNT,0)>1)
BEGIN
DECLARE @CUOMREF INT
DECLARE @COAMOUNT FLOAT
DECLARE @CSAMOUNT FLOAT
DECLARE @CURRAMOUNT FLOAT
DECLARE @CCONVFACT1 FLOAT
DECLARE @CCONVFACT2 FLOAT
DECLARE CURSOR_SORDER CURSOR FOR SELECT LOGICALREF,AMOUNT,UOMREF,CONVFACT1,CONVFACT2 FROM ORDERLINE WHERE [email protected] AND [email protected] AND [email protected] ORDER BY (CASE WHEN [email protected] THEN 0 ELSE 1 END),ISNULL(LGORFICHEREF,2147483647)
OPEN CURSOR_SORDER
FETCH NEXT FROM CURSOR_SORDER INTO @ORDERLINEREF,@COAMOUNT,@CUOMREF,@CCONVFACT1,@CCONVFACT2
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF (ISNULL(@LSTAMOUNT,0)<=0)
BEGIN
BREAK
END
SET @CURRAMOUNT=0
IF((@ISEAN=1 OR @ISPARTIAL=0) AND @PARTIALAMOUNT IS NOT NULL)
BEGIN
SET @[email protected]
--SET @CONVFACT1 = @CCONVFACT1
--SET @CONVFACT2 = @CCONVFACT2
END
ELSE
BEGIN
SELECT @[email protected]*(CONVFACT1/CONVFACT2),@CONVFACT1=CONVFACT1,@CONVFACT2=CONVFACT2 FROM LABEL_CARD_UNITA WHERE BARCODEREF [email protected] AND UOMREF [email protected]
END
IF (ISNULL(@USELABELUNITA,0)=0 AND @CURRAMOUNT =0)
BEGIN
SET @CURRAMOUNT = @LSTAMOUNT*@CCONVFACT1/@CCONVFACT2
SET @CONVFACT1 = @CCONVFACT1
SET @CONVFACT2 = @CCONVFACT2
END
SELECT @CSAMOUNT=ISNULL(SUM(CAST(CAST(AMOUNT AS NUMERIC(28,6)) AS FLOAT)),0) FROM STLINE WHERE [email protected] AND [email protected] AND [email protected] AND [email protected] AND [email protected]
IF (@COAMOUNT>@CSAMOUNT AND ISNULL(@CURRAMOUNT,0)>0)
BEGIN
IF (@COAMOUNT >= @CSAMOUNT + (@CURRAMOUNT))
BEGIN
SET @LSTAMOUNT=0
END
ELSE
BEGIN
SET @CURRAMOUNT = (@COAMOUNT - @CSAMOUNT)
SET @[email protected]@CURRAMOUNT
END
SET @DATE=GETDATE()
--SELECT 'bir', @STFICHEREF,8,4,@ITEMREF,@VARIANTREF,@BARCODEREF,@CURRAMOUNT,@CUOMREF,@USREF,@CONVFACT1,@CONVFACT2,@CLIENTREF,@BRANCH,@SOURCEINDEX,NULL,NULL,@DATE,@ORDERFICHEREF,@ORDERLINEREF,NULL,NULL,NULL,@TERMINALREF,@SPECODE
EXEC MOB_STLINE_INSERT @STFICHEREF,8,4,@ITEMREF,@VARIANTREF,@BARCODEREF,@CURRAMOUNT,@CUOMREF,@USREF,@CONVFACT1,@CONVFACT2,@CLIENTREF,@BRANCH,@SOURCEINDEX,NULL,NULL,@DATE,@ORDERFICHEREF,@ORDERLINEREF,NULL,NULL,NULL,@TERMINALREF,@SPECODE
END
FETCH NEXT FROM CURSOR_SORDER INTO @ORDERLINEREF,@COAMOUNT,@CUOMREF,@CCONVFACT1,@CCONVFACT2
END
CLOSE CURSOR_SORDER
DEALLOCATE CURSOR_SORDER
END
ELSE
BEGIN
DECLARE @LUSTAMOUNT FLOAT
SET @DATE=GETDATE()
IF (ISNULL(@ORLCOUNT,0)=1)
BEGIN
DECLARE @OCONVFACT1 FLOAT
DECLARE @OCONVFACT2 FLOAT
SELECT @ORDERLINEREF=LOGICALREF,@UOMREF=UOMREF,@OCONVFACT1=CONVFACT1,@OCONVFACT2=CONVFACT2 FROM ORDERLINE WHERE [email protected] AND [email protected] AND [email protected]
IF((@ISEAN=1 OR @ISPARTIAL=0) AND @PARTIALAMOUNT IS NOT NULL)
BEGIN
SET @[email protected]
END
ELSE
BEGIN
SELECT @[email protected]*CONVFACT1/CONVFACT2,@CONVFACT1=CONVFACT1,@CONVFACT2=CONVFACT2 FROM LABEL_CARD_UNITA WHERE BARCODEREF [email protected] AND UOMREF [email protected]
IF (@LUSTAMOUNT IS NULL)
BEGIN
SET @LUSTAMOUNT = @LSTAMOUNT*@OCONVFACT1/@OCONVFACT2
SET @[email protected]
SET @[email protected]
END
END
END
IF @LUSTAMOUNT IS NULL
BEGIN
IF((@ISEAN=1 OR @ISPARTIAL=0) AND @PARTIALAMOUNT IS NOT NULL)
BEGIN
SET @[email protected]
END
ELSE
BEGIN
SET @[email protected]*@CONVFACT1/@CONVFACT2
END
END
--SELECT 'iki', @STFICHEREF,8,4,@ITEMREF,@BARCODEREF,ISNULL(@LUSTAMOUNT,@LSTAMOUNT),@UOMREF,@USREF,@CONVFACT1,@CONVFACT2,@CLIENTREF,@BRANCH,@SOURCEINDEX,NULL,NULL,@DATE,@ORDERFICHEREF,@ORDERLINEREF,NULL,NULL,NULL,@TERMINALREF,@SPECODE
EXEC MOB_STLINE_INSERT @STFICHEREF,8,4,@ITEMREF,@VARIANTREF,@BARCODEREF,@LUSTAMOUNT,@UOMREF,@USREF,@CONVFACT1,@CONVFACT2,@CLIENTREF,@BRANCH,@SOURCEINDEX,NULL,NULL,@DATE,@ORDERFICHEREF,@ORDERLINEREF,NULL,NULL,NULL,@TERMINALREF,@SPECODE
END
IF (@STATUS=0 OR @STATUS=6)
BEGIN
UPDATE ORDERFICHE SET [STATUS]=1 WHERE [email protected]
INSERT INTO RECORD_LOG (MODULEREF,RECORDID,IDENTITYINFO,USERREF,TERMINALREF,PROCESSDATE,[TYPE],[DESCRIPTION])
VALUES (103,@ORDERFICHEREF,'Emir Numarası:' + ' ' + @FICHENO,NULL,@TERMINALREF,@DATE,16,'Durumu : Yükleniyor')
END
RESULT:
SELECT ISNULL(@RESULT,0) [RESULT]
IF (@ISPARTIAL=1 OR @ISEAN=1)
BEGIN
SELECT ISNULL(@LSTAMOUNT,0) [LSTAMOUNT],@ISEAN [ISEAN],@CHECKTYPE [CHECKTYPE],(SELECT TOP 1 UOMREF FROM ORDERLINE WHERE [email protected] AND [email protected] AND [email protected] ORDER BY (CASE WHEN [email protected] THEN 0 ELSE 1 END),ISNULL(LGORFICHEREF,2147483647)) [ORDERUOMREF]
IF(@ISEAN=1)
BEGIN
SELECT UNL.LOGICALREF,UNL.CODE,UNL.MAINUNIT,ISNULL(ORL.CONVFACT1,ITMA.CONVFACT1) [CONVFACT1],ISNULL(ORL.CONVFACT2,ITMA.CONVFACT2) [CONVFACT2],
CASE WHEN ORL.LOGICALREF IS NULL THEN 0 ELSE 1 END [ORDERUNIT],
CASE WHEN ITMA.UNITLINEREF = @UOMREF THEN 1 ELSE 0 END [DEFAULTUNIT],
ORL.AMOUNT - SUM(CAST(CAST(ISNULL(STL.AMOUNT,0) AS NUMERIC(28,6)) AS FLOAT)) [OAMOUNT]
FROM {0}..LG_{1}_ITMUNITA ITMA
INNER JOIN {0}..LG_{1}_UNITSETL UNL ON ITMA.UNITLINEREF = UNL.LOGICALREF
LEFT OUTER JOIN ORDERLINE ORL ON ORL.ORDERFICHEREF = @ORDERFICHEREF AND ORL.STFICHEREF = @STFICHEREF AND ORL.ITEMREF = ITMA.ITEMREF AND ORL.VARIANTREF = ITMA.VARIANTREF AND ORL.UOMREF = ITMA.UNITLINEREF
LEFT OUTER JOIN STLINE STL ON ORL.LOGICALREF = STL.ORDERLINEREF
WHERE ITMA.ITEMREF = @ITEMREF AND ITMA.VARIANTREF = @VARIANTREF
GROUP BY UNL.LINENR,UNL.LOGICALREF,UNL.CODE,UNL.MAINUNIT,ORL.CONVFACT1,ITMA.CONVFACT1,ORL.CONVFACT2,ITMA.CONVFACT2,ORL.LOGICALREF,ITMA.UNITLINEREF,ORL.AMOUNT
ORDER BY UNL.LINENR
END
ELSE
BEGIN
IF((@USELABELUNITA=1 AND ISNULL(@ORLCOUNT,0)>0) OR (ISNULL(@ORLCOUNT,0)=0))
BEGIN
SELECT UNL.LOGICALREF,UNL.CODE,UNL.MAINUNIT,LBLA.CONVFACT1 [CONVFACT1],LBLA.CONVFACT2 [CONVFACT2],
CASE WHEN ORL.LOGICALREF IS NULL THEN 0 ELSE 1 END [ORDERUNIT],
CASE WHEN LBLA.UOMREF = @UOMREF THEN 1 ELSE 0 END [DEFAULTUNIT],
ORL.AMOUNT - SUM(CAST(CAST(ISNULL(STL.AMOUNT,0) AS NUMERIC(28,6)) AS FLOAT)) [OAMOUNT]
FROM LABEL_CARD_UNITA LBLA
INNER JOIN {0}..LG_{1}_UNITSETL UNL ON LBLA.UOMREF = UNL.LOGICALREF
LEFT OUTER JOIN ORDERLINE ORL ON ORL.ORDERFICHEREF = @ORDERFICHEREF AND ORL.STFICHEREF = @STFICHEREF AND ORL.ITEMREF = @ITEMREF AND ORL.VARIANTREF = @VARIANTREF AND ORL.UOMREF = LBLA.UOMREF
LEFT OUTER JOIN STLINE STL ON ORL.LOGICALREF = STL.ORDERLINEREF
WHERE LBLA.BARCODEREF = @BARCODEREF
GROUP BY UNL.LINENR,UNL.LOGICALREF,UNL.CODE,UNL.MAINUNIT,ORL.CONVFACT1,LBLA.CONVFACT1,ORL.CONVFACT2,LBLA.CONVFACT2,ORL.LOGICALREF,LBLA.UOMREF,ORL.AMOUNT
ORDER BY UNL.LINENR
END
ELSE IF(@USELABELUNITA=0 AND ISNULL(@ORLCOUNT,0)>0)
BEGIN
SELECT * FROM (
SELECT UNL.LINENR,UNL.LOGICALREF ,UNL.CODE,UNL.MAINUNIT,LBLA.CONVFACT1 [CONVFACT1],LBLA.CONVFACT2 [CONVFACT2],
CASE WHEN ORL.LOGICALREF IS NULL THEN 0 ELSE 1 END [ORDERUNIT],
CASE WHEN LBLA.UOMREF = @UOMREF THEN 1 ELSE 0 END [DEFAULTUNIT],
ORL.AMOUNT - SUM(CAST(CAST(ISNULL(STL.AMOUNT,0) AS NUMERIC(28,6)) AS FLOAT)) [OAMOUNT],ORL.LOGICALREF [ORDERLINEREF]
FROM LABEL_CARD_UNITA LBLA
INNER JOIN {0}..LG_{1}_UNITSETL UNL ON LBLA.UOMREF = UNL.LOGICALREF
LEFT OUTER JOIN ORDERLINE ORL ON ORL.ORDERFICHEREF = @ORDERFICHEREF AND ORL.STFICHEREF = @STFICHEREF AND ORL.ITEMREF = @ITEMREF AND ORL.VARIANTREF = @VARIANTREF AND ORL.UOMREF = LBLA.UOMREF
LEFT OUTER JOIN STLINE STL ON ORL.LOGICALREF = STL.ORDERLINEREF
WHERE LBLA.BARCODEREF = @BARCODEREF
GROUP BY UNL.LINENR,UNL.LOGICALREF,UNL.CODE,UNL.MAINUNIT,ORL.CONVFACT1,LBLA.CONVFACT1,ORL.CONVFACT2,LBLA.CONVFACT2,ORL.LOGICALREF,LBLA.UOMREF,ORL.AMOUNT
UNION ALL
SELECT UNL.LINENR,UNL.LOGICALREF ,UNL.CODE,UNL.MAINUNIT,LBLA.CONVFACT1 [CONVFACT1],LBLA.CONVFACT2 [CONVFACT2],
CASE WHEN ORL.LOGICALREF IS NULL THEN 0 ELSE 1 END [ORDERUNIT],
CASE WHEN LBLA.UOMREF = @UOMREF THEN 1 ELSE 0 END [DEFAULTUNIT],
ORL.AMOUNT - SUM(CAST(CAST(ISNULL(STL.AMOUNT,0) AS NUMERIC(28,6)) AS FLOAT)) [OAMOUNT],ORL.LOGICALREF [ORDERLINEREF]
FROM ORDERLINE ORL
INNER JOIN {0}..LG_{1}_UNITSETL UNL ON ORL.UOMREF = UNL.LOGICALREF
LEFT OUTER JOIN LABEL_CARD_UNITA LBLA ON ORL.UOMREF=LBLA.UOMREF
--AND ORL.UOMREF = LBLA.UOMREF
LEFT OUTER JOIN STLINE STL ON ORL.LOGICALREF = STL.ORDERLINEREF
WHERE LBLA.BARCODEREF = @BARCODEREF AND ORL.ORDERFICHEREF = @ORDERFICHEREF AND ORL.STFICHEREF = @STFICHEREF AND ORL.ITEMREF = @ITEMREF AND ORL.VARIANTREF = @VARIANTREF AND LBLA.LOGICALREF IS NULL
GROUP BY UNL.LINENR,UNL.LOGICALREF,UNL.CODE,UNL.MAINUNIT,ORL.CONVFACT1,LBLA.CONVFACT1,ORL.CONVFACT2,LBLA.CONVFACT2,ORL.LOGICALREF,LBLA.UOMREF,ORL.AMOUNT
) AS A
ORDER BY A.LINENR
END
END
END
Diese * geschlossene * [post] (http://stackoverflow.com/questions/18783/favourite-performance-tuning-tricks) hier kann Ihnen helfen. –
Danke @GeomanYabes, aber ich brauche keine Leistung jetzt gibt es sofort auf riesige Daten zurück, aber die Logik ist zu lang. Ich denke, ich muss diese SP auf jedem if schneiden, und ich schreibe additinal sps für diesen Dank für dieses Thema ist sehr nett übrigens –
@arachnida, sollten Sie nicht erwarten, dass jemand verbringen Stunden auf diesem langen Skript, das spezifisch für Ihre Geschäftslogik ist . – FLICKER