Sql 如何将电子邮件列的数据从表A移动到B中的电子邮件列,并返回ID';B的s到新列(EmaiID)作为表A的外键

Sql 如何将电子邮件列的数据从表A移动到B中的电子邮件列,并返回ID';B的s到新列(EmaiID)作为表A的外键,sql,sql-server,Sql,Sql Server,我用这个方法解决了这个问题: DECLARE @id INT DECLARE @emailRecordId INT DECLARE @email NVARCHAR(50) DECLARE db_cursor CURSOR FOR SELECT id, email FROM A WHERE EmailId IS NULL; OPEN db_cursor FETCH NEXT FROM db_cursor INTO @id, @email WHILE @@FETCH_STATUS = 0

我用这个方法解决了这个问题:

DECLARE @id INT
DECLARE @emailRecordId INT
DECLARE @email NVARCHAR(50)

DECLARE db_cursor CURSOR FOR
SELECT  id, email
FROM A
WHERE EmailId IS NULL;

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @id, @email

WHILE @@FETCH_STATUS = 0  
BEGIN

    INSERT INTO B (Email) VALUES(@email)

    SET @emailRecordId = SCOPE_IDENTITY();

    UPDATE A SET EmailId = @emailRecordId where Email = @email
    FETCH NEXT FROM db_cursor INTO @id, @email

END;

CLOSE db_cursor  
DEALLOCATE db_cursor
但我需要通过一个update语句(不带循环,也不需要逐个调用)以更高的性能重写它。

您似乎想要:

INSERT INTO B (Email) 
    SELECT DISTINCT email 
    FROM A
    WHERE EmailId IS NULL;

UPDATE A
    SET EmailId = B.EmailId
    FROM A JOIN
         B
         ON A.email = B.email;
不需要光标或循环。

您似乎想要:

INSERT INTO B (Email) 
    SELECT DISTINCT email 
    FROM A
    WHERE EmailId IS NULL;

UPDATE A
    SET EmailId = B.EmailId
    FROM A JOIN
         B
         ON A.email = B.email;

不需要游标或循环。

如果该解决方案有效,则使用的是SQL Server,而不是MySQL。如果该解决方案有效,则使用的是SQL Server,而不是MySQL。