SQL進階篇_MSSQL [双迴圈]

SQL 双迴圈

  • 宣告變數
    • DECLARE @_EX INT
  • 設定變數值
    • SET @_EX = 10
  • 迴圈
    • WHILE (condition)
  • 起始&結束
    • BEGIN <作用域> END
  • 設定指標
    • 宣告指標 DECLARE BBB CURSOR FOR SELECT * FROM TABLE
    • 取得資料轉成變數 FETCH NEXT INTO @_VAR1
  • 指標關閉
    • 關閉 CLOSE <指標>
    • 釋放記憶體 DEALLOCATE <指標>
  • 双迴圈 用巢狀方式撰寫
    • BEGIN BEGIN <作用域> END END

範例程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
--宣告變數型態
DECLARE @_BMIN INT
DECLARE @_BMAX INT
DECLARE @_CMIN INT
DECLARE @_CMAX INT
DECLARE @_BCNUM VARCHAR(20)
DECLARE @_BSNUM VARCHAR(20)

--(LEVEL 1)宣告指標變數
DECLARE BCUS_BCNUM CURSOR FOR SELECT BCNUM FROM dbo.BCUS WHERE BCTYP='C'

--(LEVEL 1)設定變數值
SET @_CMIN = 0
SET @_CMAX = (SELECT COUNT(BCNUM) FROM BCUS WHERE BCTYP='C')

OPEN BCUS_BCNUM --(LEVEL 1)開啟指標, 請求資料


--(LEVEL 1)WHILE迴圈起始結束值
WHILE (@_CMIN < @_CMAX)
--(LEVEL 1)BEGIN <作用域> END
BEGIN
FETCH NEXT FROM BCUS_BCNUM INTO @_BCNUM --(LEVEL 1) FETCH請求資料
--(LEVEL 2)宣告指標變數
DECLARE BSTO_BSNUM CURSOR FOR SELECT BSNUM FROM dbo.BSTO
--(LEVEL 2)設定變數值
SET @_BMIN = 0
SET @_BMAX = (SELECT COUNT(BSNUM) FROM BSTO)
OPEN BSTO_BSNUM --(LEVEL 2)開啟指標, 請求資料

WHILE (@_BMIN < @_BMAX) --(LEVEL 2) WHILE迴圈起始結束值
BEGIN
FETCH NEXT FROM BSTO_BSNUM INTO @_BSNUM --(LEVEL 2) FETCH 請求資料, 把資料變設定成變數
--編寫指令, 裡面的VALUES數值用變數迭代
INSERT INTO dbo.BDZS (TRDAT,BSCLS,BSNUM,BSCTM,BSNUC,BSAVX)
VALUES ('2021-10-18','C',@_BSNUM,@_BCNUM,@_BSNUM,0)
SET @_BMIN = @_BMIN + 1
END
CLOSE BSTO_BSNUM --(LEVEL 2) 關閉指標
DEALLOCATE BSTO_BSNUM --(LEVEL 2) 釋放指標記憶體
SET @_CMIN = @_CMIN + 1
END

CLOSE BCUS_BCNUM --(LEVEL 1) 關閉指標
DEALLOCATE BCUS_BCNUM --(LEVEL 1) 釋放指標記憶體

GO

SQL_NOTE : 20211018_1.1