Member 14573784 Ответов: 2

Автоматическое создание идентификационного номера


Автоматическое создание идентификатора как yyyynnnn где "гггг" - текущий календарный год и ‘ХХХХ’ следующий код серийный номер на календарный год.
например 20200001
Примечание: серийный номер ‘nnnn’ должен начинаться с 1 при изменении календарного года.

Что я уже пробовал:

Auto generate ID number as yyyynnnn where ‘yyyy’ is current calendar year and ‘nnnn’ is the next ID serial number for the calendar year.
e.g. 20200001
Note: ‘nnnn’ serial number should start with 1 when calendar year changes.

Maciej Los

Что вы уже пробовали до сих пор? Где же ты застрял?

2 Ответов

Рейтинг:
2

OriginalGriff

Настройте поле идентификатора для автоинкремента и предоставьте уникальное значение для каждой строки.
Затем установите a вычисляемый столбец[^] который генерирует ваш идентификатор на основе года.
Создайте таблицу с тремя столбцами:
УДОСТОВЕРЕНИЕ ЛИЧНОСТИ (ИНТЕЛЛЕКТ, ЛИЧНОСТЬ)
InsDate (дата)
YearID (NVARCHAR(8)
Создание скалярной функции:

CREATE FUNCTION [dbo].[fnGetYearID] 
(
	@DT DATE
)
RETURNS NVARCHAR(8)
AS
BEGIN
	DECLARE @Result NVARCHAR(8)
    SET @Result = cast(year(@DT) as varchar) + (SELECT RIGHT('0000' + CAST(COUNT(*) AS NVARCHAR(4)), 4) FROM MyTable WHERE YEAR(InsDate) = YEAR(@DT))
	RETURN @Result

END
Измените дизайн таблицы, чтобы сделать столбец YearID вычисляемым столбцом, а спецификацию вычисляемого столбца установить на:
([dbo].[fnGetYearID]([InsDate]))

Теперь попробуйте добавить столбец с датой и без других данных.


Maciej Los

5ed!

Рейтинг:
0

Jignesh Khant

int year = date.Year;
int MonthPart = date.Month;
int dayPart = date.Day;
int OrderNo = 000;
string ON = "";
var lstData = dbEntities.TableName.OrderByDescending(company => company.ModifiedDate).Take(1).ToList();

if (lstData != null && lstData.Count() > 0 && MonthPart != 01 && dayPart != 01)
            {
                foreach (var item in lstData)
                {
                    ON = item.TestOrderNo.ToString().Substring(item.TestOrderNo.ToString().Length - 3);
                    OrderNo = int.Parse(ON) + 1;
                }
            }
            else
            {
                OrderNo = 001;
            }
TON = YearPart + "-" + OrderNo.ToString().PadLeft(3, '0');