Я смотрел на вопрос postgres, и он требовал обновления таблицы со случайными значениями.
Я только заметил, что он был нацелен на postgres после ответа, но, отвечая на него, я столкнулся с загадкой.
Вот мой пример кода:
create table #Buildings([Use] varchar(50), n int)
insert #Buildings
select null,null from sysobjects
update #Buildings
set [Use] =
case (ABS(CAST(CAST(NEWID() AS VARBINARY) AS int)) % 6)
when 0 then null
when 1 then 'warehouse'
when 2 then 'office'
when 3 then 'market'
when 4 then 'retail'
when 5 then 'workshop'
else 'HOW IS THIS POSSIBLE'
end,
n = ABS(CAST(CAST(NEWID() AS VARBINARY) AS int)) % 6
select [Use], count(*) from
#Buildings
group by [Use]
select n, count(*) from
#Buildings
group by n
Возвращает очень странный набор результатов:
Use
-------------------------------------------------- -----------
workshop 128
HOW IS THIS POSSIBLE 633
NULL 287
retail 140
warehouse 258
market 177
office 209
И второй набор результатов, который имеет полный смысл:
n
----------- -----------
0 292
3 300
1 313
4 277
5 311
2 339
Данные для обоих наборов результатов были сгенерированы в одном и том же операторе обновления.
Итак, мой вопрос: почему число из диапазона от 0 до 5 попадает в мой регистр? Что это за номер? Почему, когда я обновляю int напрямую, вещи распределяются правильно?