-1

私は、この SQL DB の移行全体についてまったくの初心者であり、学ぶ準備ができています。

2 つの異なるデータベースがあり、両方にユーザー テーブルがありHtUser、1 つの宛先データベースとHTUserソース データベースで呼び出されます。

ソースデータベースの特定の列からデータをコピーするスクリプトを作成し、コピーfirstName, lastName, email先データベースにコピーしFirstName, LastName, Email、「特別なフィールド」UserNameに ch + からの 2 文字と からのfirstName3文字を含むスクリプトを作成したいと考えてい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;
4

3 に答える 3

6

db1 と db2 という名前の 2 つのデータベースがあると仮定すると、これでうまくいくかもしれません。

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;

このバージョンは、db2.dbo.HTUser に存在しないユーザーを db1.dbo.HtUer からコピーします。

そして、推奨を使用したバージョン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
    );
于 2013-03-28T15:20:11.180 に答える
1

INSERT INTO...SELECTこれでステートメントを使用できます。

INSERT  INTO db1.HtUser (firstName, lastName, email, [username])
SELECT  firstName, lastName, email,
        'ch' + SUBSTRING(firstName,1,2) + SUBSTRING(lastname,1,3)
FROM    db2.HtUser 
于 2013-03-28T15:20:43.070 に答える
1

SQL Server 2005 以降に付属する TABLEDIFF ユーティリティを調べましたか? 良い例はここここにあります

tablediff.exe utility features

Comparison between two tables from SQL Server instance. 
Row by row fast comparision. 
**Perform column level comparison.** 
Easily generate change script between production and development SQL server instances.
Log result can be captured as output file or database table.
Location:

tablediff.exe is available on SQL Server instance at 
"<DriveLetter>:\Program Files\Microsoft SQL Server\90\COM\TableDiff.exe"

 <DriveLetter> is the hard drive where SQL Server instance is installed.
于 2013-03-28T16:51:19.507 に答える