MS SQL 2005更新另一个表中的记录

时间:2013-12-12 10:51:31

标签: sql sql-server sql-server-2005

很抱歉,如果这是一个愚蠢的问题,但我不太了解SQL。我有一个客户表,我希望更新每个客户的发票地址。我已将新发票地址导入临时表名InvAdd-Temp。有没有办法循环遍历所有客户记录,并且客户ID等于临时表客户ID,它会将地址详细信息插入到客户表中。我猜我需要某种循环,但不知道如何去做。我到目前为止的代码是;

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 个答案:

答案 0 :(得分: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 Server应更新哪个表。

答案 1 :(得分: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

这应该可以解决问题。

祝你好运!