我想用一个增量数字更新我的列 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
子句从正在更新的行中捕获值。 这回答了为什么你不能做你想做的事的问题。
我发现你的查询有点难以理解 - 你的问题没有解释你想做什么 - 所以很难提出替代方案。