2013-12-12 73 views
1

對不起,如果這是一個愚蠢的問題,但我不知道我的SQL解決方案很好。我有一張客戶表,我正在尋找更新每位客戶的發票地址。我已將新發票地址導入臨時表名稱InvAdd-Temp。有沒有辦法循環訪問所有客戶記錄,並且客戶ID等於臨時表客戶ID,它將地址詳細信息插入到客戶表中。我猜我需要某種循環,但不知道如何去做這件事。我到目前爲止的代碼是;MS SQL 2005從另一個表更新記錄

UPDATE [Test].[dbo].[Customer] 

SET [InvAddress1] = [Test].[dbo].[InvAdd-Temp].[InvAddress1] 

    ,[InvAddress2] = [Test].[dbo].[InvAdd-Temp].[InvAddress2] 
    ,[InvAddress3] = [Test].[dbo].[InvAdd-Temp].[InvAddress3] 
    ,[InvTown] = [Test].[dbo].[InvAdd-Temp].[InvTown] 
    ,[InvCounty] = [Test].[dbo].[InvAdd-Temp].[InvCounty] 
    ,[InvPostCode] = [Test].[dbo].[InvAdd-Temp].[InvPostCode] 
    ,[AccountNum] = [Test].[dbo].[InvAdd-Temp].[AccountNum] 

WHERE [CustomerId] = [Test].[dbo].[InvAdd-Temp].[CustomerId] 

有了這個,我得到以下

消息4104,級別16,狀態1,第1行多部分標識符 「Test.dbo.InvAdd-Temp.CustomerId」 的錯誤不能約束。

再次,道歉,如果我做一些愚蠢的事情,但這是我第一次嘗試這個。

感謝您提供的任何幫助

回答

2

這當然是可能的,但你需要加入兩個表。試着這樣做:

UPDATE Cust 
SET Cust.InvAddress1 = Temp.InvAddress1, 
    Cust.InvAddress2 = Temp.InvAddress2, 
    ... 
FROM [Test].[dbo].[Customer] Cust INNER JOIN 
    [Test].[dbo].[InvAdd-Temp] Temp ON Cust.CustomerId = Temp.CustomerId 

注意你如何使用別名Cust告訴SQL服務器的表應該被更新。

0

當然,試試這個:

UPDATE c 
    SET c.[InvAddress1] = t.[InvAddress1] 
     ,c.[InvAddress2] = t.[InvAddress2] 
     ,c.[InvAddress3] = t.[InvAddress3] 
     ,c.[InvTown] = t.[InvTown] 
     ,c.[InvCounty] = t.[InvCounty] 
     ,c.[InvPostCode] = t.[InvPostCode] 
     ,c.[AccountNum] = t.[AccountNum] 
FROM [Test].[dbo].[Customer] AS c 
INNER JOIN Test].[dbo].[InvAdd-Temp] AS t ON t.CustomerId = c.CustomerId 

這應該做的伎倆。

祝你好運!

相關問題