2017-10-18 19 views
0

我有一张名为销售额的表。在这个表中我有一列Invoice_Number。我想要达到的目的是以字母数字顺序排列发票号码,例如一个静态字母,然后是一个类似A1,A2,A3 ...等等的数字。正如我在其余的例子中看到的,我不想改变A到B.使用MSSQL的字母数字发票号码的顺序递增

我可以通过这个查询得到的数字增量:

Select IsNull(MAX([Invoice_Number] + 1), 1) from sales 

但它不能在它之前加一个字母。

谢谢。

+0

你不想对自己这样做。你正在创造一个竞赛条件。为什么您必须在发票编号的前面加上'A'?使用A存储在数据库中真的很重要吗?你能不能把这封信贴在发票和其他信件上?或者使用计算列将A追加到前面。 –

回答

0

尝试使用像这样的演员来返回一个varchar,让我知道如果这有助于:)。

SELECT 'A' + CAST(ISNULL(MAX([Invoice_Number] + 1), 1) AS nvarchar) FROM sales 
1

您可以使用您现有的identity column作为种子。将此与computed column结合以返回InvoiceNumber

-- Combine a seed with a computed column. 
CREATE TABLE #Example 
(
    Seed   INT IDENTITY(1,1), 
    InvoiceNumber AS 'A' + CAST(Seed AS VARCHAR(5)), 
    Customer  VARCHAR(25) 
); 

-- Add some sample records. 
INSERT INTO #Example 
(
    Customer 
) 
VALUES 

    ('A PLC'), 
    ('B PLC'), 
    ('C LTD') 
; 

-- Returns InvoiceNumbers A1, A2 & A3. 
SELECT 
    * 
FROM 
    #Example 
; 
+0

或者您可以创建一个单独的序列,如果您想避免发票编号/例如当草稿记录被删除时。 CREATE SEQUENCE InvoiceCounter START WITH 1 INCREMENT BY 1; GO 选择'A'+ cast(InvoiceCounter的下一个值为nvarchar) – Reno