Часть первая, Генерация таблицы со всеми возможными значениями
DECLARE @i int
CREATE TABLE #AllChars(value CHAR(1))
SET @i=48
WHILE @i<=57
BEGIN
INSERT INTO #Allchars(value) VALUES(CHAR(@i))
SET @i=@i+1
END
SET @i=65
WHILE @i<=90
BEGIN
INSERT INTO #Allchars(value) VALUES(CHAR(@i))
SET @i=@i+1
END
CREATE TABLE AllCodes(value CHAR(3),
CONSTRAINT PK_AllChars PRIMARY KEY CLUSTERED(value))
INSERT INTO AllCodes(value)
SELECT AllChars1.Value+AllChars2.Value+AllChars3.Value
FROM #AllChars AS AllChars1,#AllChars AS AllChars2,#AllChars AS AllChars3
Это однократная операция, выполнение которой в SQL Azure занимает около 1 секунды. Теперь, когда у вас есть все возможные значения в таблице, будущие вставки станут чем-то вроде
SELECT
RadiusTable.UserID,
RadiusTable.JobID,
IDTable.Value
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY UserID,JobID) As RadiusRow,
UserID,JobID
FROM Radius
) AS RadiusTable INNER JOIN
(
SELECT ROW_NUMBER() OVER (ORDER BY newID()) As IDRow,
Value
FROM AllCodes
) AS IDTable ON RadiusTable.RadiusRow = IDTable.IDRow
Прежде чем использовать любую из этих схем, вам лучше убедиться, что в вашей таблице не будет более 46656 строк, в противном случае у вас закончатся уникальные значения ID.