如何将数据从一个表复制到SQL Server中的另一个表

时间:2017-07-11 21:28:21

标签: sql sql-server

我们有2个表TableATableB。我们在两个表中都有用户名作为公共列。我需要将表B中的数据导入表A,其中用户名相同

  • 表A具有用户名,用户ID,用户全名,用户电子邮件列
  • 表B包含用户名,用户ID,用户全名,用户电子邮件列。

我们在表B中有超过10000条记录包含所有详细信息但我们在表A中只有用户名列。我需要通过复制表A中的其余列(用户ID,用户全名,电子邮件)来更新表B.

我们怎么做?请帮忙

2 个答案:

答案 0 :(得分:1)

这可以让你得到你想要的东西......

IF OBJECT_ID('tempdb..#TableA', 'U') IS NOT NULL 
DROP TABLE #TableA;

CREATE TABLE #TableA (
     UserID INT, 
     FullName VARCHAR(20), 
     Email VARCHAR(30)
    );

IF OBJECT_ID('tempdb..#TableB', 'U') IS NOT NULL 
DROP TABLE #TableB;

CREATE TABLE #TableB (
     UserID INT, 
     FullName VARCHAR(20), 
     Email VARCHAR(30)
    );

INSERT #TableA ( UserID, FullName, Email ) VALUES
    (1, 'Jane Doe', 'jd@Gmail.com'),
    (2, 'John Doe', 'John_doe@yahoo.com'),
    (3, 'Someone Else', 's.Else@hotmail.com');

INSERT #TableB (UserID) VALUES
    (1), (2), (3);

-- check the begin values in both tables...
SELECT * FROM #TableA ta;
SELECT * FROM #TableB tb;

--============================================

UPDATE tb SET 
    tb.UserID = ta.UserID, 
    tb.FullName = ta.FullName, 
    tb.Email = ta.Email
FROM
    #TableB tb
    JOIN #TableA ta
        ON tb.UserID = ta.UserID;


-- check the end values in both tables...
SELECT * FROM #TableA ta;
SELECT * FROM #TableB tb;

HTH, 杰森

答案 1 :(得分:0)

您可以使用的另一个SQL工具是MERGE

--Create first table
CREATE TABLE #aa(
    username varchar(50),
    userid varchar(50),
    userfullname varchar(50),
    useremail varchar(50)
)
GO
--Create second table
CREATE TABLE #bb(
    username varchar(50),
    userid varchar(50),
    userfullname varchar(50),
    useremail varchar(50)
)
GO
--Insert all data into temp table #aa
INSERT #aa (username,userid,userfullname,useremail)
VALUES
    ('AAA','ID1','JOHN DOE','AAA@YAHOO.COM'),
    ('BBB','ID2','BILLY BOB','BBB@YAHOO.COM'),
    ('CCC','ID3','TOM HANKS','CCC@GMAIL.COM'),
    ('DDD','ID4','CONNOR MCGREGOR','DDD@GMAIL.COM'),
    ('EEE','ID5','FLOYD MAYWEATHER','EEE@GMAIL.COM')
GO
--Insert only the username in temp table #bb
INSERT #bb (username)
VALUES
    ('AAA'),
    ('BBB'),
    ('CCC'),
    ('DDD'),
    ('EEE')
GO
--See #bb before
SELECT * FROM #bb

MERGE #bb AS TARGET
USING #aa AS SOURCE
ON TARGET.username = SOURCE.username
WHEN MATCHED
THEN UPDATE SET
    TARGET.userid = SOURCE.userid,
    TARGET.userfullname = SOURCE.userfullname,
    TARGET.useremail = SOURCE.useremail;
GO

--See #bb after
SELECT * FROM #bb

DROP TABLE #aa
DROP TABLE #bb

合并前

+----------+--------+--------------+-----------+
| username | userid | userfullname | useremail |
+----------+--------+--------------+-----------+
|  AAA     |  NULL  |    NULL      |   NULL    |
|  BBB     |  NULL  |    NULL      |   NULL    |
|  CCC     |  NULL  |    NULL      |   NULL    |
|  DDD     |  NULL  |    NULL      |   NULL    |
|  EEE     |  NULL  |    NULL      |   NULL    |
+----------+--------+--------------+-----------+

合并后

+----------+--------+-------------------+----------------+
| username | userid |  userfullname     | useremail      |
+----------+--------+-------------------+----------------+
|  AAA     |  ID1   |  JOHN DOE         | AAA@YAHOO.COM  |
|  BBB     |  ID2   |  BILLY BOB        | BBB@YAHOO.COM  |
|  CCC     |  ID3   |  TOM HANKS        | CCC@GMAIL.COM  |
|  DDD     |  ID4   |  CONNOR MCGREGOR  | DDD@GMAIL.COM  |
|  EEE     |  ID5   |  FLOYD MAYWEATHER | EEE@GMAIL.COM  |
+----------+--------+-------------------+----------------+