Этот вопрос связан с этим thread, не уверен, что я должен опубликовать этот новый вопрос в этом сообщении или создать новое сообщение, но был обеспокоен тем, что он не может рассматриваться как следующий вопрос в старом столбце ...Генерировать уникальные случайные идентификаторы, циклические по таблице SQL
- Мне нужно заменить кучу идентификаторов случайными, но уникальными новыми в таблице SQL.
- Я использую код t-clausen.dk из этого thread, чтобы сгенерировать новые идентификаторы.
- Я использую временную таблицу для повторения старых идентификаторов, создания нового идентификатора, а затем обновления таблицы с новым идентификатором. (эта часть решения в этом thread)
- Моя проблема в том, что все новые идентификаторы в конечном итоге совпадают. Как я могу получить @r для очистки, чтобы он мог генерировать новый номер?
Или есть лучший способ решить эту проблему в целом? Скажите, не зацикливая ...?
SELECT * INTO #ControlTable FROM tempmaster DECLARE @ei varchar(max) DECLARE @r varchar(8) WHILE EXISTS (SELECT * FROM #ControlTable) BEGIN SELECT @ei = (SELECT TOP 1 externalid FROM #ControlTable ORDER BY externalid ASC) -- CREATE UNIQUE RANDOM ID SELECT @r = coalesce(@r, '') + n FROM (SELECT top 8 CHAR(number) n FROM master..spt_values WHERE type = 'P' AND (number between ascii(0) and ascii(9) or number between ascii('A') and ascii('Z') or number between ascii('a') and ascii('z')) ORDER BY newid()) a -- REPLACE OLD ID UPDATE tempmaster SET externalid = @r WHERE externalid = @ei DELETE #ControlTable WHERE externalid = @ei /*TESTING*/ --SELECT @ei AS EI, @r AS [newID] --SELECT * FROM #ControlTable --SELECT * FROM tempmaster WHERE externalid = @ei OR externalid = @r END drop table #ControlTable
ЗДЕСЬ Очерк Попытки подстроено ПОДХОДОМ
DECLARE @r varchar(8);
SELECT oid, startdate, enddate,
coalesce(@r, '') + n
FROM (SELECT TOP 8
CHAR(number) n FROM
master..spt_values
WHERE type = 'P' AND
(number between ascii(0) and ascii(9)
or number between ascii('A') and ascii('Z')
or number between ascii('a') and ascii('z'))
ORDER BY newid())
as externalid
FROM MasterTable
Является ли ваш оригинальный внешний вид уже уникальным? – trincot
да оригинальный идентификатор является уникальным varchar – dharol