MSSQL WHILE 쿼리문 0 1 1,727

by 고재원 [SQL Query] [2022.10.20 15:33:39]


CREATE TABLE #ordernonm
  (
     orderno VARCHAR(20),
     ordernm VARCHAR(150)
  )

INSERT INTO #ordernonm
SELECT DISTINCT orderno,
                (SELECT prodspec
                 FROM   order_sheet_anierp
                 WHERE  Rtrim(Ltrim(orderno)) = Rtrim(Ltrim(a.orderno))) AS
                orderNm
FROM   put_sheet_anierp a
WHERE  putdate >= '20220101'
       AND putdate <= '20221231'                  
UNION ALL
SELECT orderno,
       product
FROM   yp2015new
WHERE  yyyy = '2022'

CREATE TABLE #seq
  (
     idx     INT,
     orderno VARCHAR(150)
  )

INSERT INTO #seq
SELECT DISTINCT Row_number()
                  OVER(
                    ORDER BY orderno),
                orderno
FROM   #ordernonm
GROUP  BY orderno

------------------------------------------------------------------------------------------------
CREATE TABLE #main
  (
     orderno VARCHAR(20),
     code    VARCHAR(20),
     item    VARCHAR(200),
     subitem VARCHAR(200),
     cqty    FLOAT,
     cprice  FLOAT,
     camt    FLOAT,
     yyyy    VARCHAR(10)
  )

DECLARE @cnt INT,
        @i   INT

SET @cnt = (SELECT Count(idx)
            FROM   #seq)
SET @i = 1


WHILE ( @i <= @cnt )
  BEGIN
      DECLARE @Idx     INT,
              @OrderNo VARCHAR(20)
  --exec ORDER_STOCK_AMT_S_JO '20220101', '20221231', '17A527'  

  SELECT @OrderNo = Orderno
  FROM #seq
  WHERE idx = @i
  
  Insert Into #Main
  exec  dbo.ORDER_STOCK_AMT_S_JO '20220101', '20221231', @OrderNo  
  
  SET @i = @i + 1
  

  END

SELECT * FROM   #main

DROP TABLE #ordernonm
DROP TABLE #seq
DROP TABLE #main 

 

이렇게 오류가 발생합니다. 해결 방법이 없을까요?

결과에서 항목은 모두 출력되는데 값이 일부 NULL 로 표시됩니다.

17A527    M-060    A   B    1    NULL    NULL    2022
17A527    M-4375    C    D    1    NULL    NULL    2022
17A527    M-5542   E    F    1    NULL    NULL    2022

이걸 개별로 출력해 보면 이렇게 값이 나와요

17A527    M-060    A   B    1   10603439    10603439    2022
17A527    M-4375    C    D    1    36890.913    36890.913    2022
17A527    M-5542   E    F    1   243384.7712   243384.7712    2022

 

(194개 행이 영향을 받음)

(179개 행이 영향을 받음)
메시지 8164, 수준 16, 상태 1, 프로시저 dbo.ORDER_STOCK_AMT_S_JO, 줄 53 [배치 시작 줄 0]
INSERT EXEC 문은 중첩될 수 없습니다.

(79개 행이 영향을 받음)
메시지 8164, 수준 16, 상태 1, 프로시저 dbo.ORDER_STOCK_AMT_S_JO, 줄 53 [배치 시작 줄 0]
INSERT EXEC 문은 중첩될 수 없습니다.

(1개 행 적용됨)
메시지 8164, 수준 16, 상태 1, 프로시저 dbo.ORDER_STOCK_AMT_S_JO, 줄 53 [배치 시작 줄 0]
INSERT EXEC 문은 중첩될 수 없습니다.

(457개 행이 영향을 받음)
메시지 8164, 수준 16, 상태 1, 프로시저 dbo.ORDER_STOCK_AMT_S_JO, 줄 53 [배치 시작 줄 0]
INSERT EXEC 문은 중첩될 수 없습니다.

..... n

by 고재원 [2022.10.21 15:30:21]

EXEC ORDER_STOCK_AMT_S_JO 프로시저 안에 또다른 프로시저가 있어 수정했어요

이제 정상적으로 내용이 출력됩니다.

 

이렇게 나온 결과가 아래 테이블과 같습니다. 약 2만5천개 정도 출력 되는데

Orderno Code Item SubItem cQty cPrice cAmt Yyyy
17A527 M-010 46-549 ORDER 355NM 1 473111 473111 2017
17A527 M-1037 ss-YT10 sd-52 1 13000000 13000000 2017
17A527 M-109 202-A-H-750 FORCER 1 603564 603564 2017
17A527 M-1217 CT-4500-66 CABLE 1 37647 37647 2017
19A119 M-13685 LASER 355-20 NL 1 26191801 26191801 2022
19D001 M-10180 SO_14 A6061 1 40000 40000 2019
19D001 M-10181 Z-AXIS A6061 1 39000 39000 2019

 

이렇게 출력된 부분은 아래 표와 같이 출력하고 싶어요

Code Item SubItem cQty cPrice cAmt Yyyy
17A527         14114322  
M-010 46-549 ORDER 355NM 1 473111 473111 2017
M-1037 ss-YT10 sd-52 1 13000000 13000000 2017
M-109 202-A-H-750 FORCER 1 603564 603564 2017
M-1217 CT-4500-66 CABLE 1 37647 37647 2017
19A119         26191801  
M-13685 LASER 355-20 NL 1 26191801 26191801 2022
19D001         79000  
M-10180 SO_14 A6061 1 40000 40000 2019
M-10181 Z-AXIS A6061 1 39000 39000 2019

 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입