我有一个包含50列的表格,让我们说a,b,c,d
等。
我想从a的新值b中更新a和c
,所以
b=b+a,c=c+b ,d = c+ d,..
等
我不想做类似的更新
Update [table] set b=b+a, c= c+b+a..
等
因为对于每个列更新,我必须编写一个巨大的计算公式,每个列都会变得更大,更复杂。
我想要更新的表有大约5000万行,所以我认为创建多个更新语句将是一种明智的自杀表现。
我应该如何处理? 你认为使用变量是一个好主意吗?
谢谢你,对不起我的英语。
注意:很抱歉没有清楚我的问题。 现有表中有50个新列。 第一个新列a是使用与其他表的连接计算的。 第二个新列b是通过将结果添加到a的新值来计算的,我希望使用与其他表的连接(与第一次更新相同的表)进行计算。 相同的逻辑适用于计算所有50列的值。
答案 0 :(得分:0)
你可以尝试使用像这样的选择更新。
UPDATE T
SET a = T.a
,b = T.b
,c = T.c
,d = T.d
...
...
SELECT a
,b = b + a
,c = c + b
,d = d + c
...
...
FROM yourtable T
答案 1 :(得分:0)
<强>更新:强>
感谢您更新您的问题。当然,在SUBQUERIES
语句中使用UPDATE
来完成大部分工作。您可以通过indexes
/ SARG
ON
中的WHERE
在查询中使用predicates
。
由于您的逻辑自行依赖于列的其他表,因此以下内容将有所帮助:
CREATE TABLE #TABLE1 (ColA INT, ID INT IDENTITY(1,1) )
INSERT INTO #TABLE1 (ColA ) VALUES (1)
CREATE TABLE #TABLE2 (ColB INT, ID INT IDENTITY(1,1) )
INSERT INTO #TABLE2 (ColB) VALUES (4)
CREATE TABLE #TABLE3 (ColC INT, ID INT IDENTITY(1,1) )
INSERT INTO #TABLE3 (ColC) VALUES (10)
SELECT ColC + B.ColB AS ColC, ColC, B.ColB, B.ColA, B.ORIGINAL, B.ID
FROM #TABLE3 A
RIGHT OUTER JOIN (SELECT ColB + B.ColA AS ColB, ColA, ORIGINAL, B.ID
FROM #TABLE2 A
RIGHT OUTER JOIN (SELECT ColA + ColB AS ColA, ColB AS ORIGINAL, A.ID
FROM #TABLE1 A
INNER JOIN #TABLE2 B ON A.ID = B.ID) B ON A.ID = B.ID ) B ON A.ID = B.ID
请注意,为简单起见,我只假设这些表具有相同的ID
列,因为我在列表中保留了内部subquery
ID
。 SQL
从右向左(首先是内部查询),所以请记住这一点。
这可能是一系列连接,但至少大多数重复逻辑都是子查询本身内部的句柄。 OUTER JOINS
有意义,因为您希望保留内部查询的值,并将该新计算值与下一个外部subquery
进行比较。