我有一个包含account numbers
和card numbers
的数据库。我将这些匹配到一个文件,以update
任何卡号到帐号,所以我只使用帐号。
我创建了一个视图链接表与帐户 / 卡数据库,以返回Table ID
和相关的帐号,现在我需要更新 ID 与帐号匹配的记录。
这是Sales_Import
表,其中需要更新account number
字段:
LeadID AccountNumber
147 5807811235
150 5807811326
185 7006100100007267039
这是RetrieveAccountNumber
表,我需要从中更新:
LeadID AccountNumber
147 7006100100007266957
150 7006100100007267039
我试过以下,但到目前为止没有运气:
UPDATE [Sales_Lead].[dbo].[Sales_Import]
SET [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE [Sales_Lead].[dbo].[Sales_Import]. LeadID =
RetrieveAccountNumber.LeadID)
它会将卡号更新为帐号,但帐号会被NULL
替换
我相信通过JOIN
进行UPDATE FROM
将有助于:
UPDATE
Sales_Import
SET
Sales_Import.AccountNumber = RAN.AccountNumber
FROM
Sales_Import SI
INNER JOIN
RetrieveAccountNumber RAN
ON
SI.LeadID = RAN.LeadID;
UPDATE
Sales_Import SI,
RetrieveAccountNumber RAN
SET
SI.AccountNumber = RAN.AccountNumber
WHERE
SI.LeadID = RAN.LeadID;
将内容从一个表复制到另一个表的简单方法如下:
UPDATE table2
SET table2.col1 = table1.col1,
table2.col2 = table1.col2,
...
FROM table1, table2
WHERE table1.memberid = table2.memberid
您还可以添加条件以复制特定数据。
对于 SQL Server 2008 + 使用MERGE
而不是专有的UPDATE ... FROM
语法有一些吸引力。
除了作为标准 SQL 并因此更具可移植性之外,如果源端存在多个连接行(因此在更新中使用多个可能的不同值)而不是使最终结果不确定,它也会引发错误。 。
MERGE INTO Sales_Import
USING RetrieveAccountNumber
ON Sales_Import.LeadID = RetrieveAccountNumber.LeadID
WHEN MATCHED THEN
UPDATE
SET AccountNumber = RetrieveAccountNumber.AccountNumber;
不幸的是,选择哪种使用可能不会纯粹归结为优选的风格。 SQL Server 中MERGE
的实现受到各种错误的影响。 Aaron Bertrand 在这里编制了一份报告清单。