Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何定义WHILE循环的中断条件?_Sql_While Loop_Sql Server 2016 - Fatal编程技术网

Sql 如何定义WHILE循环的中断条件?

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

我提出的问题可能很简单,但我一直在绞尽脑汁想办法解决它

我有两张桌子。第一个在某个时间点保存CustomerID,另一个跟踪更新(当某些数据发生更改时,会为客户分配一个新ID以进行区分)。因此,作为一个例子,CustomerID“0001”可以更新为“0002”,然后更新为“0004”(任意选取;只是下一个可用ID)

我试图做的是循环update语句,以便它跟踪更新的整个足迹-一些CustomerID可能没有更改,其他可能已经经过了多次迭代

我已经通过update语句实现了这一点,尽管将它放入WHILE循环会导致它无限循环,因为最后一批更新将无限期地重复出现

当所有源列与目标列匹配时,打破循环的最佳方法是什么

源表的结构是从CustomerID到CustomerID和MergedDateTime

我现有的更新声明是:

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
循环不太可能是最佳解决方案。