Автоматически сгенерированный номер с использованием хранимой процедуры или функции
У меня есть таблица со случайными числами. Формат-первые два всегда 90 (число начинается с), а последние четыре могут быть любой комбинацией, например этот И еще одна вещь, которую я хотел бы добавить, - это процедура проверки того, существует ли число уже или нет, если оно пропускает это число и т. д..
EDIT: id хотел бы упомянуть, что с этой хранимой процедурой я пытаюсь начать с 900001 до конца. При этом он придет к тому, что текущее число уже существует в таблице, и тогда он перейдет к следующему.
Что я уже пробовал:
Я пытался следовать этому:
Alter procedure Gen_SerialNumber ( @ItemType char(1), @ItemBatchNumber varchar(30), @Date datetime, @SerialNumber varchar(20) out, @fifthDigit int ) AS Begin set @ItemType=(Select ItemType from ItemBatchNumber where ItemBatchNumber=@ItemBatchNumber) Declare @SerialNumber1 varchar(20) Set @SerialNumber1='xyz'+''+@ItemType+''+CAST( (Select COUNT(distinct ItemBatchNumber)from ItemBatchNumber where ItemType=@ItemType) as varchar (10) ) Set @fifthDigit=SUBSTRING(@SerialNumber1,5,1) if exists(Select SerialNumber from Gen_SN where SerialNumber=null or SerialNumber!=@SerialNumber) set @fifthDigit=1 if exists(Select mfgDate,ItemBatchNumber from Gen_SN where mfgDate=@Date and ItemBatchNumber=@ItemBatchNumber) Set @fifthDigit=1 else set @fifthDigit=@fifthDigit+1 Set @SerialNumber=('xyz'+''+@ItemType+''+cast(@fifthdigit as varchar(2))) Insert into Gen_SN values(@ItemType,@ItemBatchNumber,@SerialNumber,@Date) END
Получил это от здесь но не могу понять, так как моя ситуация немного отличается.
ZurdoDev
Какой у вас вопрос?
r00n3y
как я могу получить следующий порядковый номер, когда таблица не имеет всего в последовательности, и когда она получает его (убедитесь, что он уникален)?? Смотрите скриншот, который я опубликовал
ZurdoDev
Нет никакого волшебного способа сделать это. Вам просто нужно написать код. Напишите функцию, которая имеет цикл, и вы продолжаете цикл, пока не найдете следующую, которая не используется.
r00n3y
Я знаю, что волшебного пути не существует, а писать-это то, чего не хватает моим знаниям.
ZurdoDev
Посмотрите, как сделать цикл в sql, и начните с этого.
r00n3y
Я получил следующее:
Объявите @new_seq INT=(
ВЫБЕРИТЕ ТОП 1
[NewLeaseNumber] + 1
Из [LeaseNumber] mo с(ROWLOCK,XLOCK,HOLDLOCK)
Где не([NewLeaseNumber] имеет значение null) и не существует
(
ВЫБЕРИТЕ NULL
Из [LeaseNumber] mi с(ROWLOCK,XLOCK,HOLDLOCK)
Где Ми.[NewLeaseNumber] = mo.[NewLeaseNumber] + 1
)
ЗАКАЗАТЬ ПО
[NewLeaseNumber]
);
Если @new_seq равен NULL
BEGIN SET @new_seq=900001;
КОНЕЦ
ЕЩЕ
Начинаем набор @new_seq=@new_seq;
КОНЕЦ
Вставить в dbo.[LeaseNumber] ([NewLeaseNumber]) значения (@new_seq);
Но проблема в том, что в моей таблице было всего несколько сотен номеров, а 900001 нет, поэтому я хотел бы начать с этого. Какие-нибудь советы?