2012-09-28 37 views
0

我必須更新一個錯誤更新的SQL Server表格的數據,這會導致一行單元格的數據覆蓋下一條數據。以下是什麼樣的表應該已經在正確的狀態的例子:使用下一條記錄的數據更新SQL Server單元格數據

FirstName  LastName  EmailID 
-------------------------------------------------- 
abc   xyz   [email protected] 
def   321   [email protected] 
ghi   123   [email protected] 

誤的數據已經變成了:

FirstName LastName EmailID 
--------------------------------------------- 
abc   xyz   something 
def   321   [email protected] 
ghi   123   [email protected] 

我知道,最後一個記錄不會被發現,但ATLEAST其他應正確

+0

什麼是主鍵?只有你需要更新的EmailID? – Prasanna

+0

歡迎來到StackOverflow:如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼樣本」按鈕(「{}」)以精確地格式化和語法突出它!這樣,你就不需要任何雜亂的' '標籤了! –

+0

爲了回答這個問題,您需要提供關鍵字段。 SQL在表中沒有下一個的本地概念,您可以使用主鍵創建該概念。 – Sparky

回答

1

恢復假設你的表是通過有序的firstName,姓氏您可以使用此:

declare @contact as table (firstName varchar(255), lastName varchar(255), emailID varchar(255)) 
insert into @contact (firstName, lastName, emailID) 
values 
    ('abc', 'xyz', 'something') 
    ,('def', '321', '[email protected]') 
    ,('ghi', '123', '[email protected]'); 


with contactCTE(rowNo, firstName, lastName, emailID) 
as 
(
    select 
     ROW_NUMBER() OVER (ORDER BY firstName, lastName DESC) 
     ,firstName 
     ,lastName 
     ,emailID 
    from 
     @contact 
) 
update c1 
set 
    emailID = c2.emailID 
from 
    contactCTE c1 
    inner join contactCTE c2 on c1.rowNo +1 = c2.rowNo; 

select * from @contact  

如果您的數據的不同順序不同,請修改ORDER BY零件contactCTE以反映此問題

相關問題