2017-06-22 51 views
0

如果硬編碼值爲'04200001000000',並且想自動增加最後一個號碼。我無法在網上找到關於此功能的任何信息。我使用SQL服務器2014年如何在已經使用特定號碼的情況下添加自動增量序列號

例子:

0420000100000001 
0420000100000002 
0420000100000003 
0420000100000004 
0420000100000005 
0420000100000006 
0420000100000007 
0420000100000008 
0420000100000009 
0420000100000010 
+0

當你10行,會發生什麼? –

+0

當有10行時,第15個字符將是「1」。如果有100行,那麼第14個字符將會是1號,15號,0號和16號0 @GordonLinoff – Carl

回答

0

我們確實需要更多的信息,但根據列的類型可以這麼寫:

ALTER TABLE myTable ALTER COLUMN columnName IDENTITY (04200001000001, 1);

+0

所以這個EmpNo是我創建的表中的特定列。此時該列被設置爲:TabEmpNo ='04200001000001',這是一個硬編碼值。對於所有員工,除最後一位數字之外,此值將相同,具體取決於行數。所以如果有5行:04200001000001,04200001000002,04200001000003,04200001000004,04200001000005 – Carl

+0

有沒有辦法可以添加case語句以自動增加這些值? – Carl

+0

列的類型是什麼?如果這是一些某種類型的上述應該工作。一旦運行,添加新行時只需將'EmpNo'留空,數據庫將自動填入下一個數字。 –

-1

假設你的員工「number」實際上是一個字符數據類型(因爲它包含前導零),所以可以使用SEQUENCE。

例如

CREATE SEQUENCE dbo.EmpNumbers 
AS BIGINT 
START WITH 4200001000000 
INCREMENT BY 1 
MIN VALUE 4200001000000 
MAX VALUE 9999999999999 
CACHE 10 
; 

然後,您可以在添加新員工時使用它來生成新的員工編號,例如,

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

試試這個

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 
相關問題