Создание уникального идентификатора не-Int и не-Guid - PullRequest
0 голосов
/ 17 февраля 2012

Я ищу способ, которым SQL Server может генерировать уникальный идентификатор, который не является инкрементом Int или GUID.

Уникальный идентификатор может быть комбинацией букв и цифр и не имеет других символов, и, как уже упоминалось, должен быть уникальным.

т.е. AS93K239DFAK

И, если возможно, всегда должны начинаться с AS или заканчиваться K

Было бы хорошо, если бы этот уникальный идентификатор мог быть сгенерирован автоматически, когда есть Insert как GUID и IsIdentity = Yes. Это может быть случайное число, оно не предопределено в приложении.

Возможно ли что-то подобное сделать или оно должно генерироваться на стороне приложения?

Ответы [ 5 ]

5 голосов
/ 17 февраля 2012

Судя по комментариям, вы можете использовать поле IDENTITY, добавив 0 и добавив префикс / суффикс.Примерно так должно работать:

1 - Добавить поле IDENTITY, которое будет автоматически увеличено
2 - Добавить вычисляемое поле в таблицус определением:

[InvoiceNo] AS ('AS' + RIGHT(('000000000' + CAST(idfield AS varchar(9))), 9) + 'FAK')

Это даст вам invoiceno в формате:

AS000000001FAK
AS000000002FAK
...
AS000995481FAK
3 голосов
/ 17 февраля 2012

Я никогда не видел случайно сгенерированный номер счета. Большинство из них обычно представляют собой комбинацию нескольких идентифицирующих полей. Например, один сегмент может быть companyID, другой может быть InvoieID, а третий может быть значением Date

Например, AS-0001-00005-K или AS-001-00005-021712-K, что будет означать CompanyId 1, Счет № 5, сгенерированный 2/17/12

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

Если вы хотите указать, сколько компаний существует, вместо этого используйте альфа-код компании, чтобы ваш конечный результат выглядел как AS-R07S-00005-K или ASR07S00005K

2 голосов
/ 17 февраля 2012

Так что вы можете сделать это таким образом, просто не ожидайте, что это будет работать хорошо.

(1) заполнить большую массивную таблицу некоторым исчерпывающим набором значений счетов-фактур, которые должны быть как минимум вдвое больше счетов, которые вы думаете вам когда-либо понадобятся. Заполните данные в случайном порядке заранее.

(2) создать хранимую процедуру, которая вытягивает следующий счет из стопки, а затем либо удаляет его, либо помечает как принятый.

Но убедитесь, что это решение имеет смысл для вашего бизнеса. Во многих странах фактически закономерно, чтобы номера счетов-фактур были последовательными. Я предполагаю, что мы на самом деле не говорим о счетах, но хотели удостовериться, что они хотя бы рассмотрены.

0 голосов
/ 20 февраля 2012

Как вы вставляете эти новые счета в таблицу? Прямая пакетная вставка или вы выполняете сначала какую-то бизнес-логику / проверку целостности в хранимой процедуре и «создаете» счета-фактуры один за другим?

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

0 голосов
/ 18 февраля 2012

Что такого странного в том, что случайная часть уникальна? Если у вас есть двухзначный номер счета-фактуры, может быть только 100 уникальных значений (от 00 до 99). GUID имеет значение от 2 до 128 значений и является статистически уникальным. Если вы используете 8 символов GUID, то даже с 1 миллионом счетов у вас есть шанс сделать ставку на столкновение. С 1 миллионом счетов, если вы используете 12 символов GUID, у вас есть очень хороший шанс НЕ получить столкновение. Если вы используете 16 символов GUID, то вы в значительной степени статистически уникальны, если у вас менее 1 миллиарда счетов. Я бы использовал 12 символов, но проверил фактические значения на уникальность, и у вас есть только шанс получить столкновение в лотерее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...