我想用增量号更新我的专栏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
为什么我会获得Derived table' 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
答案 0 :(得分:4)
您正尝试在单个update
语句中更新两个不同表中的列:
Num
来自Acc.DocHeader
iNum
来自Acc.DocItem
在SQL Server中,您只能在UPDATE
中一次更新一个表。
您可以在一个事务中更新多个表。您还可以使用OUTPUT
子句捕获正在更新的行中的值。这回答了为什么你不能做你想做的事情的问题。
我发现你的查询有点难以理解 - 而你的问题并不能解释你想要做什么 - 所以很难提出替代方案。