很抱歉,如果这是一个愚蠢的问题,但我不太了解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"无法受约束。
再次,如果我做了一些愚蠢的事情,我会道歉但这是我第一次尝试此事。
感谢您提供的任何帮助
答案 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
这应该可以解决问题。
祝你好运!