如何使用 row_number() 在大纲中用增量数字更新列 Num?



我想用一个增量数字更新我的列 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"不可更新,因为修改会影响多个基表?

文档标题表:

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

文档项表:

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

输出:

文档标题表:

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

文档项表:

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子句从正在更新的行中捕获值。 这回答了为什么你不能做你想做的事的问题。

我发现你的查询有点难以理解 - 你的问题没有解释你想做什么 - 所以很难提出替代方案。

最新更新