Как создать уникальный номер партии на день - PullRequest
0 голосов
/ 26 мая 2019

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

набор записей должен быть следующим:

ID    | invoice date   | Batchno     |  seqno
1     | 2019-05-24     |201905000001 | 1
2     | 2019-05-24     |201905000001 | 2
3     | 2019-05-25     |201905000002 | 1
4     | 2019-05-25     |201905000002 | 2

   ON  [dbo].[EBSIEMSTransfernew]
   AFTER INSERT   

AS 

 declare @year varchar(4)
 declare @month varchar(2)
 declare @serialNo varchar(10)

 select @year = year(getdate())
 select @month = REPLICATE('0', 2-len( month(getdate())))+ cast(month(getdate()) as varchar)
 select @serialNo = Max(right(BatchNo,5)) FROM  [Onaccount].[dbo].[EBSIEMSTransfernew] where InvoiceDate >= dateadd(day,datediff(day,1,GETDATE()),0) 
 AND InvoiceDate < dateadd(day,datediff(day,0,GETDATE()),0)


BEGIN

UPDATE    [Onaccount].[dbo].[EBSIEMSTransfernew]
SET              BatchNo = @year + @month + REPLICATE('0', 5 - LEN(@serialNo + 1)) + CAST(@serialNo + 1 AS varchar)
FROM         [Onaccount].[dbo].[EBSIEMSTransfernew] INNER JOIN
                      inserted AS i ON EBSIEMSTransfernew.InvoiceDate = i.InvoiceDate
WHERE     (EBSIEMSTransfernew.InvoiceDate = i.InvoiceDate) 

SET NOCOUNT ON;



END


GO

Ответы [ 2 ]

1 голос
/ 26 мая 2019

Для номера Daily BATCH я бы выбрал вариант использования YYYYMMDD в качестве номера партии.Потому что это УНИКАЛЬНО во всех смыслах.Таким образом, каждый новый день, дата сама по себе является новым УНИКАЛЬНЫМ номером партии, как показано ниже -

20190526
20190527
...
20190530

Поскольку вы управляете ежедневным порядковым / серийным номером, начинающимся с 1, каждый день, вместе они будут создавать значимое число какЧто ж.Вы можете легко прочитать некоторые значения из них.Я бы предложил использовать 'seqno' что-то вроде 0001..0002, основываясь на предположении о максимальной сумме СЧЕТА, которая может потребоваться в течение одного дня.

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

201905260001
201905260002

Номер счета будет сам по себе значимым, поскольку он может легко понять, что Счет-фактура относится к дате 20190526, и счет на продажу был первой / второй продажей того дня.

0 голосов
/ 26 мая 2019

Триггер кажется глупым.Почему бы просто не использовать вычисляемый столбец?

alter table EBSIEMSTransfernew
    add batchnumber = datediff(day, '2019-05-04', invoice_date);

По общему признанию, это пропустит дни, когда нет пакетов.Если это проблема, вы можете сгенерировать значение в виде:

create view v_EBSIEMSTransfernew as
    select t.*,
           dense_rank() over (order by invoice_date)
    from EBSIEMSTransfernew t;

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

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