![](/img/trans.png)
[英]How to get an incremental “RowId” column in SELECT using ROW_NUMBER()
[英]How to Update column Num with an incremental number in Master-Detail with row_number()?
我想用遞增編號更新列Acc.DocHeader.Num和Acc.DocItem.Num。 我有:
UPDATE x
SET x.Num = x.newNum,x.iNum=x.newNum
FROM (
SELECT Num,iNum, ROW_NUMBER() OVER (ORDER BY DocCreateDate ,DailyNum) AS newNum
FROM (SELECT h.Num,h.DocCreateDate,h.DailyNum,i.Num iNum FROM Acc.DocHeader h INNER JOIN Acc.DocItem i ON i.DocHeaderRef = h.Id WHERE h.Year = 1395 AND h.BranchRef = 1) AS header
) x
為什么我得到的衍生表'x'無法更新,因為修改會影響多個基表?
DocHeader表:
Id Num Year DocCreateDate
-------------------------------------------------------
1 NULL 1396 2016-03-20
2 NULL 1395 2016-04-02
3 NULL 1395 2016-04-05
4 NULL 1395 2016-04-10
DocItem表:
Id Num DocHeaderRef
----------------------------------------------
1 NULL 1
2 NULL 1
3 NULL 1
4 NULL 4
5 NULL 4
6 NULL 3
7 NULL 3
8 NULL 3
輸出:
DocHeader表:
Id Num Year DocCreateDate
-------------------------------------------------------
1 1 1396 2016-03-20
2 1 1395 2016-04-02
3 2 1395 2016-04-05
4 3 1395 2016-04-10
DocItem表:
Id Num DocHeaderRef
----------------------------------------------
1 1 1
2 1 1
3 1 1
4 3 4
5 3 4
6 4 3
7 4 3
8 4 3
您試圖在一個update
語句中更新來自兩個不同表的列:
Num
來自Acc.DocHeader
iNum
來自Acc.DocItem
在SQL Server中,一次只能在UPDATE
更新一個表。
您可以在單個事務中更新多個表。 您還可以使用OUTPUT
子句從正在更新的行中捕獲值。 這回答了為什么您不能做自己想做的問題。
我發現您的查詢有點難以遵循-而且您的問題並未解釋您要嘗試執行的操作-因此很難提出其他選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.