簡體   English   中英

如何使用row_number()在Master-Detail中用增量編號更新Num列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM