2013-04-29 3 views
-2

Мне нужно присвоить уникальный номер каждому «клиенту». В основном номер счета или так сказать. Мне нужно сгенерировать порядковый номер с префиксом ... скажем ... 10001111 до конца 19999999. Номера должны быть уникальными. Я знаю, как создать случайное число, но эти числа должны быть уникальными и не могут повторяться, поэтому я застрял в том, что даже начинаю с логики программирования. Я нашел несколько C#, которые помогут, но я программирую на VB.NET. Любая помощь будет оценена!Создать последовательный номер с префиксом

+0

Если вы хотите, чтобы они случайным образом попадали в этот диапазон и при этом сохраняли свою уникальность, каждый раз, когда вы его генерируете, вам придется опросить все другие ранее сгенерированные числа, чтобы гарантировать уникальность. – NominSim

+0

Начните с одного и продолжайте добавлять его? Или есть конкретная причина, по которой вам нужно использовать случайные числа? –

+0

Мне нужна консистенция. Я, очевидно, могу сделать уникальный идентификатор с 1, 2, 3, но все они нуждаются в префиксе. –

ответ

2

Честно говоря, я не понимаю, почему вам нужно сделать что-то более сложное, чем столбец Identity в SQL Server.

CREATE TABLE Persons 
(
P_Id int PRIMARY KEY IDENTITY, 
LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
Address varchar(255), 
City varchar(255) 
) 

Источник: W3 Schools

Вы можете вытащить данные клиента обратно и предварительно ПЭНД префикс к этому статическими или динамически.

Статический пример будет

SELECT 'CUST-' + P_Id [CustomerNumber], LastName 
FROM Persons 

Но ничто не мешает вам добавить префикс в виде столбца динамически соединяя их (если нужно хранить несколько префиксов).

В конце дня вам понадобится постоянный магазин, чтобы убедиться, что вы получаете уникальный номер. Вместо того, чтобы изобретать колесо на этом, вы можете использовать сервер БД, который написан для этой цели.

Вы также можете иметь таблицу в БД, задача которой состоит в том, чтобы хранить последний идентификационный номер, и вы можете вручную увеличивать и обновлять его, но я не являюсь этим большим поклонником. Это слишком грязно.

+0

Я собираюсь с вашим предложением. Кажется, более умный и простой способ. Мне нужно несколько префиксов, но я бы просто сделал столбец или идентификатор, который идентифицирует, где идет «номер учетной записи». Также напишите логику, которая, например, если столбец «Идентификатор» равен 1, он добавляет префикс 1000-uniqueIDhere. Я предполагаю, что это сработает или я ошибаюсь/ –

+0

@LordRelix. Я бы сохранил его так же просто, как добавление столбца в таблицу под названием «IdPrefix» (или подобное), и всякий раз, когда я возвращаю идентификатор клиента, я бы объединил этот столбец с идентификатором колонка. Затем вы можете хранить любой префикс, который вам нужен при создании учетной записи, и никогда не придется его корректировать позже (если что-либо изменится в отношении добавления или удаления префиксов или т. Д.). –

+0

Отлично. Я думал, что будет более сложный путь. Я просто люблю делать мою жизнь несчастной. Бесконечно благодарен! –

1

Один из распространенных способов сделать это - создать все возможности сразу и сохранить их в списке. Когда вы хотите создать нового клиента, выберите случайное число из списка и затем удалите его из этого списка, чтобы его нельзя было использовать снова. Я не знаю, насколько это было бы в вашем сценарии.

+0

Например, у меня есть таблица ... с диапазоном min/max от 1000001 до 199999 ... Я могу просто сделать запрос, который случайно выбирает значение? –

+0

Да, и тогда вам нужно что-то сделать, чтобы удалить это значение, чтобы вы не могли его снова выбрать. Независимо от того, насколько это практично, зависит от размера вашей таблицы, могут быть «более умные» способы.См. Также http://stackoverflow.com/questions/3627029/smart-way-to-generate-unique-random-number – FakeDIY

+0

'генерировать все возможности сразу. Мы еще не в эпоху квантовых компьютеров. :) – Neolisk

Смежные вопросы