У меня есть следующий код внутри хранимой процедуры.
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 = 3 всегда корректно разбивается на две четные группы, в то время как GroupID = 1 всегда ошибочно разбивается.