如何处理从多个请求生成自定义复合键
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
我想在 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