Sql 如何定义WHILE循环的中断条件?
我提出的问题可能很简单,但我一直在绞尽脑汁想办法解决它 我有两张桌子。第一个在某个时间点保存CustomerID,另一个跟踪更新(当某些数据发生更改时,会为客户分配一个新ID以进行区分)。因此,作为一个例子,CustomerID“0001”可以更新为“0002”,然后更新为“0004”(任意选取;只是下一个可用ID) 我试图做的是循环update语句,以便它跟踪更新的整个足迹-一些CustomerID可能没有更改,其他可能已经经过了多次迭代 我已经通过update语句实现了这一点,尽管将它放入WHILE循环会导致它无限循环,因为最后一批更新将无限期地重复出现 当所有源列与目标列匹配时,打破循环的最佳方法是什么 源表的结构是从CustomerID到CustomerID和MergedDateTime 我现有的更新声明是:Sql 如何定义WHILE循环的中断条件?,sql,while-loop,sql-server-2016,Sql,While Loop,Sql Server 2016,我提出的问题可能很简单,但我一直在绞尽脑汁想办法解决它 我有两张桌子。第一个在某个时间点保存CustomerID,另一个跟踪更新(当某些数据发生更改时,会为客户分配一个新ID以进行区分)。因此,作为一个例子,CustomerID“0001”可以更新为“0002”,然后更新为“0004”(任意选取;只是下一个可用ID) 我试图做的是循环update语句,以便它跟踪更新的整个足迹-一些CustomerID可能没有更改,其他可能已经经过了多次迭代 我已经通过update语句实现了这一点,尽管将它放入W
UPDATE
a
SET
NewCustomerId = b.ToCustomerId
FROM
dbo.Job7509_Q4_Loyalty_CustomerID_Updates a
INNER JOIN Customers.dbo.MergedNames b ON a.NewCustomerId = b.FromCustomerId
最好的方法是根本不使用循环。在2016版(及更高版本)中,您可以使用SQL Server内置的数据历史机制-这可能是最好的方法。“最好的方法是根本不使用循环”这句话。正是这样。我当然想避免一般的循环。我不相信有问题的表是系统版本的,当然不是目标表。非常感谢你的建议。@HendrixAndChill。你应该问一个新问题。提供示例数据、所需结果,并清楚解释您想要实现的逻辑。
WHILE
循环不太可能是最佳解决方案。