如何将数据从一个数据库表迁移到另一个SQL?

Min*_*bag -1 sql sql-server-2008-r2

我对这整个SQL数据库迁移工作都很陌生,我已经准备好了.

我有2个不同的数据库,它们都有一个用户表,HtUser在一个目标数据库和HTUser源数据库中调用.

我想创建一个脚本,它复制源数据库中特定列的数据,这些列将在firstName, lastName, email和我的目标数据库中,FirstName, LastName, Email并且"特殊字段" UserName包含ch +两个字母firstName和来自的三个字母lastName.

    INSERT  INTO HolidayTracker.dbo.HtUser(FirstName,LastName,Email,UserName,AdAccount,AdDomain)
SELECT firstName,lastName,email,'CH'+LEFT(firstName,2)+LEFT(lastName,3),'EUROPE\'+LEFT(firstName,2)+LEFT(lastName,3),''
FROM HolidayTracker.dbo.HTUser U1
WHERE NOT EXISTS ( SELECT 1 FROM HolidayTracker.dbo.HTUser U2 WHERE U2.FirstName = U1.firstName AND U2.LastName = U1.lastName AND U2.email = U1.Email);








INSERT INTO HolidayTracker.dbo.HtUser(FirstName,LastName,Email,UserName,AdAccount,AdDomain)
SELECT firstName,lastName,email,'CH'+LEFT(firstName,2)+LEFT(lastName,3),'EUROPE\'+LEFT(fistName,2)+LEFT(lastName,3),''
FROM HolidayTracker.dbo.HTUser u1
    LEFT JOIN HolidayTracker.dbo.HtUser u2 ON u1.firstName = u2.FirstName AND u1.lastName = u2.LastName AND u1.email = u2.Email
    WHERE u2.FirstName IS NULL
    AND u2.LastName IS NULL
    AND u2.Email IS NULL;
Run Code Online (Sandbox Code Playgroud)

Max*_*non 6

假设您有2个名为db1和db2的数据库,这可能会起作用.

INSERT INTO db2.dbo.HTUser (FirstName, LastName, Email, UserName)
SELECT firstName, lastName, email, 'CH' + LEFT(firstName, 2) + LEFT(lastName, 3) 
FROM db1.dbo.HtUser U1
    LEFT JOIN db2.dbo.HTUser U2 ON U1.firstName = U2.FirstName 
        AND U1.lastName = U2.LastName 
        AND U1.email = U2.Email
WHERE U2.firstName IS NULL
    AND U2.lastName IS NULL
    AND U2.email IS NULL;
Run Code Online (Sandbox Code Playgroud)

此版本将从db2.dbo.HUUer中复制db2.dbo.HUUer中不存在的用户.

并使用首选版本NOT EXISTS(感谢@AaronBertrand!):

INSERT INTO db2.dbo.HTUser (FirstName, LastName, Email, UserName)
SELECT firstName, lastName, email, 'CH' + LEFT(firstName, 2) + LEFT(lastName, 3) 
FROM db1.dbo.HtUser U1
WHERE NOT EXISTS 
    (
        SELECT 1
        FROM db2.dbo.HTUser U2 
        WHERE U2.firstName = U1.FirstName 
            AND U2.lastName = U1.LastName 
            AND U2.email = U1.Email
    );
Run Code Online (Sandbox Code Playgroud)

  • 如果数据库位于同一个实例上,它们如何具有相同的名称?Unpossible. (3认同)
  • +1但是FYI [NOT EXISTS在这种情况下几乎总是比LEFT JOIN快](http://www.sqlperformance.com/2012/12/t-sql-queries/left-anti-semi-join). (2认同)