如何在不使用连接或合并的情况下用另一个 table 更新 table 的属性

How to update an attribute of a table with another table withouth using join or merge

我有一个名为 "customerInfo" 的临时 table,如下所示:

|CustomerNumber |
|197210271883   |
|197210271883   |
|194905062891   |
|194905301380   |

另一个 table 称为 "Person",如下所示:

|Id CustomerNumber  FirstName   LastName  |
|1  NULL            Jack        Axelsson  |
|2  198003147470    Sarah       Flöijer   |
|3  196305088491    Göte        Lagergren |

我需要根据什么在第二个 table 中更新 CustomerNumber 我在第一个。如您所见,它们之间没有关系,我无法利用连接或合并技术。

我尝试的是使用两个游标。我完全不知道这样对不对?

DECLARE @value1 bigint
DECLARE db_cursor CURSOR FOR
SELECT CustomerNumber from customerInfo;

DECLARE @value2 bigint
DECLARE db_cursor_2 CURSOR FOR
SELECT CustomerNumber from Person;

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @value1   

OPEN db_cursor_2
FETCH NEXT FROM db_cursor_2 INTO @value2   


WHILE @@FETCH_STATUS = 0   
    BEGIN   
           update Person set  CustomerNumber = @value1
           where CustomerNumber = @value2

           FETCH NEXT FROM db_cursor INTO @value1 
           FETCH NEXT FROM db_cursor_2 INTO @value2 
    END   

CLOSE db_cursor
DEALLOCATE db_cursor
CLOSE db_cursor_2
DEALLOCATE db_cursor_2

如果我没理解错的话,您想在第二个 table 中超越 CustomerNumber 的现有值?

要做到这一点,游标不是最好的主意,因为它们是按顺序工作的。也许尝试这样的事情:

; WITH CTE1 AS (
    SELECT CustomerNumber, ROW_NUMBER() OVER (ORDER BY (SELECT 100)) AS SNO
    FROM customerInfo
), CTE2 AS (
    SELECT Id, CustomerNumber, ROW_NUMBER() OVER (ORDER BY (SELECT 100)) AS SNO
    FROM Person
)
UPDATE CTE2
SET CTE2.CustomerNumber = CTE1.CustomerNumber
FROM CTE1 
    INNER JOIN CTE2 ON CTE1.SNO = CTE2.SNO

这尚未在 SQL 服务器中进行测试,因此可能存在一些错误,但您可以从上面的代码中理解这一点。