UPDATE Table 与 CTE 更新始终具有相同的值
UPDATE Table with CTE update always with the same value
我正在尝试通过数据混洗对数据库中的单个列进行匿名处理。
我创建了这个查询,但是当我 运行 它更新列 FirstName
时总是使用相同的名称:
BEGIN TRAN;
;WITH TCE_Shuffled
AS (
SELECT ROW_NUMBER() OVER (
ORDER BY [BusinessEntityID]
) AS ORIG_ROWNUM
,ROW_NUMBER() OVER (
ORDER BY NEWID()
) AS NEW_ROWNUM
,*
FROM [AdventureWorks2014].[Person].[Person]
)
UPDATE [AdventureWorks2014].[Person].[Person]
SET FirstName = t2.FirstName
FROM TCE_Shuffled t1
JOIN TCE_Shuffled t2 ON t1.ORIG_ROWNUM = t2.NEW_ROWNUM
SELECT *
FROM [AdventureWorks2014].[Person].[Person]
ROLLBACK TRAN
SELECT *
FROM [AdventureWorks2014].[Person].[Person]
在这里您可以看到 FirstName
列具有相同的值:
BusinessEntityID
PersonType
NameStyle
Title
FirstName
MiddleName
LastName
13353
IN
0
NULL
Erik
M
Griffin
13354
IN
0
NULL
Erik
NULL
Diaz
13355
IN
0
NULL
Erik
J
Xu
13356
IN
0
NULL
Erik
NULL
Sun
13357
IN
0
NULL
Erik
NULL
Zhu
13358
IN
0
NULL
Erik
R
Gao
13359
IN
0
NULL
Erik
NULL
Hayes
13360
IN
0
NULL
Erik
NULL
Ma
13361
IN
0
NULL
Erik
G
Price
13362
IN
0
NULL
Erik
M
Liang
我做错了什么?
这是 UPDATE
语句的正确语法:
UPDATE t1
SET t1.FirstName = t2.FirstName
FROM TCE_Shuffled t1 JOIN TCE_Shuffled t2
ON t1.ORIG_ROWNUM = t2.NEW_ROWNUM;
我正在尝试通过数据混洗对数据库中的单个列进行匿名处理。
我创建了这个查询,但是当我 运行 它更新列 FirstName
时总是使用相同的名称:
BEGIN TRAN;
;WITH TCE_Shuffled
AS (
SELECT ROW_NUMBER() OVER (
ORDER BY [BusinessEntityID]
) AS ORIG_ROWNUM
,ROW_NUMBER() OVER (
ORDER BY NEWID()
) AS NEW_ROWNUM
,*
FROM [AdventureWorks2014].[Person].[Person]
)
UPDATE [AdventureWorks2014].[Person].[Person]
SET FirstName = t2.FirstName
FROM TCE_Shuffled t1
JOIN TCE_Shuffled t2 ON t1.ORIG_ROWNUM = t2.NEW_ROWNUM
SELECT *
FROM [AdventureWorks2014].[Person].[Person]
ROLLBACK TRAN
SELECT *
FROM [AdventureWorks2014].[Person].[Person]
在这里您可以看到 FirstName
列具有相同的值:
BusinessEntityID | PersonType | NameStyle | Title | FirstName | MiddleName | LastName |
---|---|---|---|---|---|---|
13353 | IN | 0 | NULL | Erik | M | Griffin |
13354 | IN | 0 | NULL | Erik | NULL | Diaz |
13355 | IN | 0 | NULL | Erik | J | Xu |
13356 | IN | 0 | NULL | Erik | NULL | Sun |
13357 | IN | 0 | NULL | Erik | NULL | Zhu |
13358 | IN | 0 | NULL | Erik | R | Gao |
13359 | IN | 0 | NULL | Erik | NULL | Hayes |
13360 | IN | 0 | NULL | Erik | NULL | Ma |
13361 | IN | 0 | NULL | Erik | G | Price |
13362 | IN | 0 | NULL | Erik | M | Liang |
我做错了什么?
这是 UPDATE
语句的正确语法:
UPDATE t1
SET t1.FirstName = t2.FirstName
FROM TCE_Shuffled t1 JOIN TCE_Shuffled t2
ON t1.ORIG_ROWNUM = t2.NEW_ROWNUM;