如何在SQL Server中使用条件更新多行

时间:2014-08-29 22:45:16

标签: sql sql-server tsql

我有一个网站在几天前遭到攻击,那个坏人带走了几个用户的电子邮件并进行了更改。我需要尽可能多地恢复。

所以我有两个备份:攻击后一个,一个来自三月。

我收到很多像这样的电子邮件

SELECT [email], [userId] 
FROM [lastBackup].[dbo].[aspnet_Membership]
WHERE [email] like '%@dispostable.com'

问题是如何将我的测试基础中的每一行更新为[oldBackup]表中的值。

我认为它应该是这样的,虽然它看起来很糟糕并且不起作用=)

UPDATE [testbase].[dbo].[aspnet_Membership] AS tb
SET [email] = (SELECT om.[email] FROM [oldBackup].[dbo].[aspnet_Membership] om
               INNER JOIN             [lastBackup].[dbo].[aspnet_Membership] cm
               ON cm.userId = om.userId
               WHERE cm.[email] LIKE '%@dispostable.com'
               AND tb.userId = cm.userId)

1 个答案:

答案 0 :(得分:2)

我认为您的update...from语句错误,请尝试此操作(如documentation中所述):

UPDATE [testbase].[dbo].[aspnet_Membership]
SET [email] = om.[email] 
FROM [testbase].[dbo].[aspnet_Membership] tb 
INNER JOIN [lastBackup].[dbo].[aspnet_Membership] cm ON tb.userId = cm.userId
INNER JOIN [oldBackup].[dbo].[aspnet_Membership] om ON cm.userId = om.userId
WHERE cm.[email] LIKE '%@dispostable.com'