Мне просто интересно, я всегда задавался вопросом, почему это так.
В попытке выяснить, могу ли я создать один без символа 4 на 15-м символе, я запустил это...
DECLARE @GUID AS NVARCHAR(36)
DECLARE @COUNT AS INTEGER
SET @COUNT = 0
SET @GUID = CAST(NEWID() AS NVARCHAR(36))
WHILE SUBSTRING(@GUID,15,1) = '4'
BEGIN
SET @COUNT = @COUNT + 1
SET @GUID = CAST(NEWID() AS NVARCHAR(36))
END
PRINT 'Attempts : ' + CAST(@COUNT AS NVARCHAR(MAX))
PRINT @GUID
Как вы могли догадаться, это никогда не закончилось для меня. У меня это работало на сервере все выходные.
Если NewID должен всегда давать случайный идентификатор, почему это так всегда.
BC13DF1C-60FB-41C2-B5B2-8F1A73CF2485
D790D359-AB3D-4657-A864-FA89FACB3E99
DF1BBC0C-4205-48E8-A1B6-EA9544D7C6E5
Является ли 15-я позиция некоторой идентификацией относительно системы, которая генерировала уникальный идентификатор?
Фактически, то же самое происходит с функцией VB.net System.Guid.Newguid
. Является ли 4 единственной вещью Microsoft?
Изменить: Возможно, я должен был спросить, действительно ли они уникальны? Можно ли полагаться на то, что они уникальны во всей базе данных? Я знаю системы баз данных, основанные на предположении, что они гарантированы быть уникальными в базе данных. С несколькими миллионами записей в разных таблицах... являются ли они потенциально одинаковыми?