任何人都可以为我提供以下问题的代码:
我在sql server中有两个表。两个表都具有相同数量的字段和字段名称。如果我将这两个表视为ActualData和TempData,我需要使用“databaseID”列更新ActualData表中的数据与TempData中的数据,即例如,如果遵循TempData表
DatabaseID | FirstName | MiddleName
277459 | VALINDA | CLAY
283934 | LAURA | MARIE
2.7E+13 | Jamie | Hawley
我需要在ActualData表中找到与TempData中的行具有相同databaseID的行,并将整个记录替换为TempData表中记录的行。如果我们在ActualData中找不到记录,然后我们需要将TempData中的记录添加到ActualData中。这需要对TempData中的所有记录进行。 我怎么能这样做?
答案 0 :(得分:0)
听起来你只想要一个带有JOIN的更新:
UPDATE A
SET
A.FirstName = B.FirstName
,A.MiddleName = B.Middlename
FROM
ActualData A
JOIN
TempData B ON A.databaseID = B.databaseID
一个INSERT:
INSERT INTO ActualData
SELECT *
FROM TempData
WHERE databaseID NOT IN (SELECT DISTINCT databaseID FROM ActualData)
鉴于您有110个字段,您可能想要删除然后INSERT,因为您可以同时执行这两个操作而不列出列:
DELETE FROM ActualData
WHERE databaseID IN (SELECT DISTINCT databaseID FROM ActualData)
然后在DELETE之后执行上面的INSERT。不知道是否有办法在没有列出列的情况下使用JOIN更新。
答案 1 :(得分: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
答案 2 :(得分: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)
答案 3 :(得分: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
或者您可以使用合并命令