我希望在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实现,但我想知道更新在这里是如何工作的。
答案 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