【发布时间】:2020-06-04 23:19:54
【问题描述】:
我在 SQL Server 2014 数据库中遇到重复记录的问题。
用户会收到一张印有包裹号码的小明信片。 明信片还显示了一个简单表格的链接,他们可以使用该表格来登记他们的包裹。
很遗憾,该表单没有任何类型的验证,以确保不会多次提交同一个包裹。 我目前无法控制 Web 表单,我不确定负责团队需要多长时间才能对其进行验证。
所以我必须想出一个例程来停用重复记录,并且只保留一个。
这必须是一个处理大量记录的查询,没有令牌传递给例程。
当 web 表单被提交时,它会按顺序创建一个记录 id,并分配一个“已注册”的应用程序状态。 我认为纠正这个问题的方法是,为每个包裹获取最高记录 id 值,然后保留那个,其余的必须停用。
停用记录状态为“I”的非最新记录 将 APPLICATION_STATUS 设置为“已关闭”以显示非最新记录
我使用的查询,返回 4 列:Record Id、Parcel Number、Record Status 和 Application Status
SELECT
B.[RECORD_ID],
B.[PARCEL_NBR],
B.[RECORD_STATUS], -- The value of this column would be "I" for the duplicate records.
B.[APPLICATION_STATUS]
FROM
A_TABLE A
INNER JOIN B_TABLE B
ON A.PARCEL_NBR = B.PARCEL_NBR
AND (A.APPLICATION_STATUS IS NULL
OR B.APPLICATION_STATUS = 'Registered');
初始输出:
RECORD_ID PARCEL_NBR RECORD_STATUS APPLICATION_STATUS
REC-00081 0608012098 A Registered
REC-00082 0608012098 A Registered
REC-00083 0608012098 A Registered
预期输出:
RECORD_ID PARCEL_NBR RECORD_STATUS APPLICATION_STATUS
REC-00081 0608012098 I Closed - this record got updated
REC-00082 0608012098 I Closed - this record got updated
REC-00083 0608012098 A Registered
我认为光标可能是解决方案的一部分?老实说,我不确定。我恳请您的帮助。
【问题讨论】:
-
哪些列来自 A_TABLE,哪些列来自 B_TABLE?
-
嗨,哨兵 - 我更新了查询。这些都是表 B 列。
标签: sql sql-server duplicates sql-update