Sql 如何将已计数的行标记为已删除?康丁';d来自上一个问题

Sql 如何将已计数的行标记为已删除?康丁';d来自上一个问题,sql,sql-server,tsql,Sql,Sql Server,Tsql,好的,我刚刚意识到,从我之前的问题: 这就是使用辅助表用计数更新主表的方法,但是由于此查询将在sql作业中进行,我如何删除刚才计数的行,并确保不删除插入辅助表中的任何新行?如果我读对了,您希望(在您的第一个问题中)使用与每个EmployeeID关联的唯一IP数更新SelectionCount,现在在同一过程中,从构成这些计数的选择表中清除记录,同时不接触自SelectionCount更新以来添加的任何记录。如果您的选择表有1)主键和2)行创建日期,这将容易得多。两者缺一不可会使事情复杂化 因此,

好的,我刚刚意识到,从我之前的问题:


这就是使用辅助表用计数更新主表的方法,但是由于此查询将在sql作业中进行,我如何删除刚才计数的行,并确保不删除插入辅助表中的任何新行?

如果我读对了,您希望(在您的第一个问题中)使用与每个EmployeeID关联的唯一IP数更新SelectionCount,现在在同一过程中,从构成这些计数的选择表中清除记录,同时不接触自SelectionCount更新以来添加的任何记录。如果您的选择表有1)主键和2)行创建日期,这将容易得多。两者缺一不可会使事情复杂化

因此,我们将以一种稍微奇怪的方式来实现这一点(假设您无法更改模式)。这假设您使用的是SQL 2005或2008:

我猜你的数据类型在这里

DECLARE @TempIPs TABLE(EmployeeID int, ipaddress varchar(25))

DELETE FROM Selection
OUTPUT deleted.EmployeeID, deleted.ipAddress
INTO @TempIPs
--将对选择表的引用替换为@TempIPs,后者保存旧IP

UPDATE Employee
SET SelectionCount = IsNull((SELECT Count(DISTINCT ipAddress) 
    FROM @TempIPs
    WHERE @TempIPs.EmployeeID = Employee.ID), 0)
如果您计划在添加新记录时继续增加SelectionCount,只需在UPDATE语句中添加+SelectionCount即可。您还应该将整个批次包装在事务(BEGINTRANSACTION…COMMIT transaction)语句中