Sql 如果已使用特定的数字,如何添加自动递增的数字序列

Sql 如果已使用特定的数字,如何添加自动递增的数字序列,sql,sql-server-2014,increment,auto-increment,hardcoded,Sql,Sql Server 2014,Increment,Auto Increment,Hardcoded,如果我有一个硬编码值'04200001000000',并希望自动递增最后一个数字。我在网上找不到有关此功能的任何信息。我正在使用SQL server 2014 例如: 0420000100000001 0420000100000002 0420000100000003 0420000100000004 0420000100000005 0420000100000006 0420000100000007 0420000100000008 0420000100000009 0420000100000

如果我有一个硬编码值'04200001000000',并希望自动递增最后一个数字。我在网上找不到有关此功能的任何信息。我正在使用SQL server 2014

例如:

0420000100000001
0420000100000002
0420000100000003
0420000100000004
0420000100000005
0420000100000006
0420000100000007
0420000100000008
0420000100000009
0420000100000010

我们确实需要更多信息,但根据列的类型,这可能会起作用:

altertablemytable altercolumnname标识(04200001000001,1)

假设您的员工“编号”实际上是一种字符数据类型(因为它包含前导零),您可以潜在地使用序列

e、 g

然后,在添加新员工时,您可以使用此项生成新员工编号,例如:

SELECT 
     EmpName
   , '0' + CAST((NEXT VALUE FOR dbo.EmpNumbers) AS CHAR(13)) AS NewEmpNumber 
FROM NewEmployees
试试这个

DECLARE INT @CurrentPos = (SELECT MAX(CAST(TabEmpNo AS INT))
    FROM Table);

SET @CurrentPos = SELECT IIF(@CurrentPos IS NULL, 4200001000000, @CurrentPos);

WITH CTE
AS
(
    SELECT Col1,
        ROW_NUMBER() OVER (ORDER BY Col1) AS RN
    FROM TABLE
)
INSERT INTO TABLE
(
    Col1,
    TabEmpNo
)
SELECT Col1,
    CONCAT('0', CAST(RN + @CurrentPos AS VARCHAR(13))) AS TabEmpNo
FROM CTE

当有10行时会发生什么?当有10行时,第15个字符将是“1”。如果有100行,那么第14个字符将是1、15、16、0@GordonLinoffSo。这个EmpNo是我创建的表中的一个特定列。现在该列被设置为:TabEmpNo='04200001000001',这是一个硬编码值。此值对于所有员工都相同,但最后一位数字除外,具体取决于行数。因此,如果有5行:042000010000010000010104200000100000204000010000030420000000400004000420000005有没有一种方法可以添加一个case语句来自动递增这些值?列的类型是什么?如果是某种类型的数字,上面的方法应该有效。一旦运行,添加新行时只需将
EmpNo
留空,数据库将自动填充下一个数字。标识种子必须是整数,因此不能以零开始,即。042@Nathan是否确定SQL Server将前导零的数字解释为八进制(或非数字)?
DECLARE INT @CurrentPos = (SELECT MAX(CAST(TabEmpNo AS INT))
    FROM Table);

SET @CurrentPos = SELECT IIF(@CurrentPos IS NULL, 4200001000000, @CurrentPos);

WITH CTE
AS
(
    SELECT Col1,
        ROW_NUMBER() OVER (ORDER BY Col1) AS RN
    FROM TABLE
)
INSERT INTO TABLE
(
    Col1,
    TabEmpNo
)
SELECT Col1,
    CONCAT('0', CAST(RN + @CurrentPos AS VARCHAR(13))) AS TabEmpNo
FROM CTE