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

时间:2018-08-16 11:40:18

标签: sql sql-server sql-server-2008 linq-to-entities

我想借助SQL Server中的两列Year和CompanyId(组合键(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

谢谢!

1 个答案:

答案 0 :(得分:1)

一个人可以使用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 <>小提琴here

上进行测试