iT邦幫忙

0

SQL Server 想要select from用foreach外加select中變數疊加

有一個表格有五百筆資料 想要foreach去跑每筆
去update多筆欄位的值
並且想要設定一個變數 當每跑完更新一筆的時候就+10

dog830228 iT邦研究生 4 級 ‧ 2018-03-30 14:32:40 檢舉
可否請您提供參考數據或你期望的輸出?
C# SMI iT邦新手 5 級 ‧ 2018-03-30 15:51:00 檢舉
有一個表格有五百筆資料 想要foreach去跑每筆
去update多筆欄位的值
並且想要設定一個變數 當每跑完更新一筆的時候就+10

2 個回答

2
dog830228
iT邦研究生 4 級 ‧ 2018-03-30 17:13:06
最佳解答

你可直接使用UPDATE

  1. 宣告一個臨時變數 DECLARE @TempVal INT = 0;
  2. SET那邊設定@TempVal 你要增加的數值

如此範例 因為更新7次 你可以得到 70

DECLARE @TempVal INT = 0;

DECLARE @T TABLE
(
    VAL INT
)
INSERT INTO @T VALUES 
(1),
(2),
(3),
(4),
(5),
(6),
(7);

UPDATE @T 
SET VAL = VAL+1,@TempVal = @TempVal+10
 
SELECT VAL,@TempVal as val
FROM @T
C# SMI iT邦新手 5 級 ‧ 2018-03-30 17:27:09 檢舉

謝謝!

dog830228 iT邦研究生 4 級 ‧ 2018-03-30 17:41:24 檢舉

不會^^

2
棉花
iT邦新手 4 級 ‧ 2018-03-30 16:27:34
var num = 0;

foreach(row in table)
{
    //update row

    num = num + 10;
}

你是不是想要這樣做?

可以考慮用Cursor
http://frankiestudy.blogspot.tw/2014/06/oracle-cursor.html

C# SMI iT邦新手 5 級 ‧ 2018-03-30 16:32:41 檢舉

是的
我的版本是sql server

棉花 iT邦新手 4 級 ‧ 2018-03-30 16:36:54 檢舉

C# SMI
SQL Server也有這功能
條件一樣是用WHERE CURRENT OF [CURSOR_NAME]

大致上長這樣:

BEGIN

DECLARE @NUM NUMERIC = 0;

DECLARE CURSOR1 CURSOR FOR
SELECT COL1, COL2
  FROM TABLE1
FOR UPDATE;

OPEN CURSOR1;

FETCH NEXT FROM CURSOR1;

WHILE @@FETCH_STATUS=0 BEGIN
    UPDATE TABLE1
       SET COL1='abc'
     WHERE CURRENT OF CURSOR1

    SET @NUM += 10;
    
    FETCH NEXT FROM CURSOR1;
END;

CLOSE CURSOR1;

END;
C# SMI iT邦新手 5 級 ‧ 2018-03-30 17:27:03 檢舉

謝謝!

我要發表回答

立即登入回答