如何处理从多个请求生成自定义复合键

How to handle generate custom composite key from multiple request

我想在 SQL 服务器中的两列 Year 和 CompanyId 的帮助下生成服装唯一的 invoiceno(复合键(Year,CompanyId,Invoiceno))。

我可以使用自定义登录来生成这个唯一键,但是如果同时有多个请求插入记录,我该如何处理。

我的期望记录如下:

InvoiceId | Year            | CompanyId | InvoiceNo
1         | 2018            |      1    | IN0001
2         | 2018            |      1    | IN0002
3         | 2018            |      2    | IN0001
3         | 2018            |      3    | IN0001
4         | 2019            |      1    | IN0001
5         | 2019            |      1    | IN0002
6         | 2019            |      2    | IN0001

提前致谢!

可以使用ROW_NUMBER得到一个可以用来构成这样的InvoiceNo的数字。

SELECT 
 InvoiceId, [Year], CompanyId, 
 'IN'+ RIGHT(
        CONCAT(
         REPLICATE('0',3), 
          ROW_NUMBER() OVER (PARTITION BY [Year], CompanyId ORDER BY InvoiceId)
        ) ,4) AS InvoiceNo
FROM YourInvoiceTable
ORDER BY InvoiceId

测试 db<>fiddle here