【发布时间】:2017-02-24 22:31:27
【问题描述】:
我正在使用 T-SQL。我有两个表:全名表和 SSN 表。 SSN 表有 10000 多条记录,包括名字、姓氏和 ssn 列。 fullname 表有 100 条记录,包括名字和姓氏。
我想用全名中的名字和姓氏记录更新 SSN 表。在 100 条记录的末尾,我只想重复名称(从全名的第 1 行开始),直到它完成更新 SSN 表中的所有记录。我在下面尝试了这样的 MERGE,但收到了“MERGE 语句尝试多次更新或删除同一行”错误消息。在下面的代码中,我首先尝试更新 [last name] 列。你能帮忙吗?谢谢。
MERGE INTO [SSN]
USING [fullname]
ON 1=1
WHEN MATCHED THEN
UPDATE
SET [last name] = [fullname].[last name];
【问题讨论】:
-
所以要澄清一下:(1)您不关心将哪个名称分配给哪个 ssn,但是您想使用 100 个名称的轮换而不是仅使用一个名称,对吗? (2) 表是否有顺序 ID 列?
-
(1) 不,没关系。没有与 SSN 匹配的名称。这将是所有测试数据。 (2) 只有 SSN 确实有顺序 ID 列,但如果需要,我可以将顺序 ID 添加到全名表。
-
请告诉我您没有以明文形式存储 SSN。我知道您正在生成测试数据,但 SSN 需要始终加密。
-
你为什么在这里使用 MERGE 而不是更新?
-
@Sean,这些是测试 SSN,根本不是真正的 SSN。这是一个完全内部的测试数据库。我存储的信息无关紧要。我的总体目标是用名字姓氏更新所有 10000 多条记录。关于您的第二个问题,是的,我可以使用 UPDATE 但您能建议如何使用吗?我也尝试了 UPDATE,但它最多只能更新 100 条记录。
标签: sql sql-server