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。