Мне удалось решить собственную проблему. Нам нужно проверить, существует ли уже URLID в таблице. Проблема в том, что URLID не записывается в таблицу до тех пор, пока запрос не будет полностью выполнен. Использование 6 из 24 возможных символов даст нам около 191 миллиона возможностей (от 24 до 6). Поскольку нам нужно всего лишь создать 5 миллионов идентификаторов, существует небольшая вероятность дублирования записей.
Вот как я это сделал:
Шаг 1 - Генерация случайного URLID для 5 миллионов строк используя исходный код
Шаг 2 - Определите дубликаты и обновите их до нулевого значения, используя запрос ниже
UPDATE URLIDs SET URLIDs.URL = Null
WHERE (((URLIDs.URL) In (SELECT [URL] FROM [URLIDs] As Tmp GROUP BY [URL] HAVING
Count(*)>1 )));
Шаг 3 - Создайте новый URLID для нулей, определенных на шаге 2. На этот раз, проверяя посмотреть, если они уже существуют в таблице. См. Код ниже:
Public Function getURLID(roll As Double) As String
Randomize
Dim rgch As String
rgch = "ABCDEFGHJKLMNPQRSTUVWXYZ"
Dim i As Long
For i = 1 To 6
getURLID = getURLID & Mid$(rgch, Int(Rnd() * Len(rgch) + 1), 1)
Next
Do Until URLIDExists(getURLID) = False
getURLID = ""
For i = 1 To 6
getURLID = getURLID & Mid$(rgch, Int(Rnd() * Len(rgch) + 1), 1)
Next
Loop
End Function
Функция ниже используется для проверки, существует ли URL
Public Function URLIDExists(URLID As String) As Boolean
Dim RS1
Dim strQuery As String
strQuery = "SELECT * from [URLIDs] where [URL]='" & URLID & "'"
Set RS1 = CurrentDb.OpenRecordset(strQuery)
If RS1.RecordCount > 0 Then
URLIDExists = True
Else
URLIDExists = False
End If
Set RS1 = Nothing
End Function
Я повторял шаги 2 и 3, пока больше не было дубликатов. Каждый раз проверяется наличие уже подтвержденного URLID. В конце концов больше не будет дубликатов URLID.