我在存储过程中有以下代码。
select
ID,NTILE(2) OVER (Partition by GroupID order by newID()) as RandomSplit
into #TempSplit
from TableA
where IsUpdated = 1
Update a
set a.SplitColumn = CASE WHEN b.RandomSplit = 1 THEN 'A'
WHEN b.RandomSplit = 2 THEN 'B'
END
from Table A a
inner join #TempSplit b
on a.ID = b.ID and a.IsUpdated = 1
此代码按预期工作,并生成下面的数据表。
GroupID SplitColumn
1 | A
1 | A
1 | B
1 | B
2 | A
3 | A
3 | B
但是,当我从存储过程中执行此代码时,会得到以下结果
GroupID SplitColumn
1 | A
1 | A
1 | A
1 | B
2 | A
3 | A
3 | B
这是示例数据,但是基本上发生的是,当我从存储过程执行时,组并不是均匀分布的(在实际数据中,变化是成千上万,而不仅仅是一个)。不知道到底是什么导致了此行为,因为如果我再次手动执行代码,它将带来正确的行为。 我也知道这只是正在发生的事情的一小部分,但并不是所有GroupID都在发生。表示GroupID = 3总是正确地分成两个偶数组,而说GroupID = 1总是被错误地分为两类。
答案 0 :(得分:0)
您仅为#TempSplit
所在的行创建IsUpdated = 1
。
但是,您将重新加入 all 值。如果id
在TableA
中重复,那么您将看到所得到的结果。