-1

誰でも私に次の問題のコードを提供できますか:

SQL サーバーに 2 つのテーブルがあります。両方のテーブルには、同じ数のフィールドとフィールド名があります。2 つのテーブルを ActualData と TempData と見なしている場合、列 'databaseID' を使用して、ActualData テーブルのデータを TempData のデータで更新する必要があります。たとえば、次の場合は TempData テーブルです。

DatabaseID | FirstName |  MiddleName    
277459 | VALINDA | CLAY         
283934 | LAURA | MARIE          
2.7E+13 | Jamie | Hawley

TempData の行と同じ databaseID を持つ ActualData テーブルの行を見つけて、レコード全体を TempData テーブルのレコードの行に置き換える必要があります。ActualData にレコードが見つからない場合は、そのレコードを TempData から ActualData に追加する必要があります。これは、TempData 内のすべてのレコードに対して行う必要があります。どうやってやるの?

4

4 に答える 4

0
Update a Set
     FirstName = t.FirstName,
     LastName = t.LastName,
     etc.
From ActualData a
    Join TempData t
        On t.DatabaseId = a.DatabaseId
-- -----------------------------------
Insert ActualData(DatabaseId, 
    FirstName, LastName,
    etc. ...)
Select DatabaseId, 
    FirstName, LastName,
    etc.
From tempData t
Where Not exists
    (Select * From ActualData
     DatabaseId = t.DatabaseId)
于 2013-06-06T15:44:19.120 に答える
0

JOIN を使用した UPDATE が必要なようです。

UPDATE A
SET
    A.FirstName = B.FirstName 
   ,A.MiddleName = B.Middlename
FROM
    ActualData A
    JOIN
    TempData B ON A.databaseID = B.databaseID

そして挿入:

INSERT INTO ActualData 
SELECT *
FROM TempData 
WHERE databaseID  NOT IN (SELECT DISTINCT databaseID  FROM ActualData)

110 個のフィールドがある場合、列をリストせずに両方を実行できるため、DELETE と INSERT を実行する必要がある場合があります。

DELETE FROM ActualData 
WHERE databaseID  IN (SELECT DISTINCT databaseID FROM ActualData)

次に、DELETE の後に上記の INSERT を実行します。列をリストせずに JOIN で UPDATE する方法があるかどうかはわかりません。

于 2013-06-06T15:41:01.783 に答える
0

これを試して:

 update ad
 set FirstName = td.FirstName,
     Middlename = td.MiddleName
 from ActualData ad
 inner join TempData td
 on ad.DatabaseID = td.DatabaseId
 where ad.FirstName != td.FirstName or ad.MiddleName != td.MiddleName

 insert into ActualData (DatabaseId, FirstName, MiddleName)
 select td.DatabaseId, td.FirstName, td.MiddleName
 from TempData td 
 left outer join ActualData ad on td.DatabaseId = ad.DatabaseId
 where ad.DatabaseId is null
于 2013-06-06T15:41:40.690 に答える
0

そのような更新/挿入コマンドを使用します(SQL 2000以降と互換性があります)

Update ActualData
Set FirstName = TempData.FirstName,
MiddleName = TempData.MiddleName
FROM ActualData
INNER JOIN TempData ON ActualData.DatabaseId = TempData.DatabaseId

insert into ActualData(DatabaseId, FirstName, MiddleName)
SELECT TempData.DatabaseId, TempData.FirstName, TempData.MiddleName
FROM TempData
LEFT OUTER JOIN ActualData ON ActualData.DatabaseId = TempData.DatabaseId
WHERE ActualData.DatabaseId IS NULL

または、マージコマンドを使用できます

于 2013-06-06T15:45:26.613 に答える