SQL - 更新两列,其中一列依赖于其他列

时间:2017-04-11 12:05:41

标签: sql sql-server tsql common-table-expression

我希望在B列依赖于A列的时候更新表的两列。

更新前

ColA ColB

A11  NULL

B22  NULL

C33  NULL

D44  NULL

更新后

ColA ColB

11  A

22  B

33  C

44  D

我正在将更新语句写为

UPDATE tbl SET ColA = STUFF(ColA,1,1,''), ColB = LEFT(ColA, 1)

这里ColB应该在ColA之前更新,这对于小结果集来说工作正常。但是,当有大量记录时,它会如何表现? SQL更新是否随机发生?

我真的不确定它是否会在ColB更新完成后更新ColA。这可以通过CTE实现,但我想知道更新在这里是如何工作的。

2 个答案:

答案 0 :(得分:1)

根本不存在问题。 SQL是声明性的,会使你的语句以某种方式工作。

对于笑(或建立信心),请尝试SET a=b, b=a

它会将值交换到它不应该的程序性思维。

答案 1 :(得分:0)

BEGIN TRAN
Create Table #Temp (ColA NVARCHAR(10),ColB NVARCHAR(10))

INSERT INTO #Temp
SELECT 'A11',  NULL UNION ALL
SELECT 'B22',  NULL UNION ALL
SELECT 'C33',  NULL UNION ALL
SELECT 'D44' , NULL


SELECT * FROM #Temp
UPDATE #Temp SET ColA=SUBSTRING(ColA,2,2),ColB=SUBSTRING(ColA,1,1)

SELECT * FROM #Temp
ROLLBACK TRAN