あなたはthe code
CREATE TABLE #Char
(
[Value] CHAR(1)
);
CREATE TABLE Codes
(
[Code] CHAR(3)
);
INSERT #Char
VALUES
('0'),
('1'),
('2'),
('3'),
('4'),
('5'),
('6'),
('7'),
('8'),
('9'),
('A'),
('B'),
('C'),
('D'),
('E'),
('F'),
('G'),
('H'),
('I'),
('J'),
('K'),
('L'),
('M'),
('N'),
('O'),
('P'),
('Q'),
('R'),
('S'),
('T'),
('U'),
('V'),
('W'),
('X'),
('Y'),
('Z');
INSERT Codes
SELECT
T.[Code]
FROM
(SELECT
A.[Value] + B.[Value] + C.[Value] [Code]
FROM
#Char A
CROSS JOIN
#Char B
CROSS JOIN
#Char C) T
ORDER BY
RAND();
SELECT COUNT([Code]) FROM [Codes];
を考慮すればあなたは正確に46656順列があることがわかります。
今、あなたはすべての可能な順列のテーブルを持っていることをあなたはこのようなすべての未使用コードを取得することができます、
SELECT [Code] FROM [Codes]
EXCEPT
SELECT [Code] FROM [Table123]
ベア心の中で、[Table123]
が大きくなるにつれて、これはあなたの呼び出しの多くを救うことNEWID()
のように、文字通り、最初の3文字が同じ数十億のユニークIDがあるためです。
[コード]テーブルには、コードが使用されているかどうかを示すビットフィールドを追加するなど、コード割り当てのパフォーマンスを最適化するためにできることがたくさんあります。
3文字コードはそれほどありません!多くの人よりも少ないです。 – Jodrell
十分な50kの組み合わせがあります – attention
潜在的な反復回数が増えるにつれて、新しいユニークな値を生成する50kに近づくにつれて、問題はますます問題になります。壁に当たったら、無限ループに終わることができます。本当にこの方法を使いたいのであれば、最初に利用可能な値の表を作成し、それを使用するときにその行を削除してください。 –