我不建議在你目前有什麼,但是,我會做這種方式。這是我在我的應用程序中實現的方式。我會給你哪個。希望你喜歡這個。對於您可能擁有的所有交易,這完全是動態的和有效的。
我已經持有的文檔號爲表:
CREATE TABLE INV_DOC_FORMAT(
DOC_CODE VARCHAR(10),
DOC_NAME VARCHAR(100),
PREFIX VARCHAR(10),
SUFFIX VARCHAR(10),
[LENGTH] INT,
[CURRENT] INT
)
將舉行的數據,如:
INSERT INTO INV_DOC_FORMAT(DOC_CODE,DOC_NAME,PREFIX,SUFFIX,[LENGTH],[CURRENT])
VALUES('01','INV_UNIT','U','',5,0)
INSERT INTO INV_DOC_FORMAT(DOC_CODE,DOC_NAME,PREFIX,SUFFIX,[LENGTH],[CURRENT])
VALUES('02','INV_UNIT_GROUP','UG','',5,0)
而且,我有一個函數或過程,但是,我這裏有一個函數可以生成文檔編號。
CREATE FUNCTION GET_DOC_FORMAT(@DOC_CODE VARCHAR(100))RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @PRE VARCHAR(10)
DECLARE @SUF VARCHAR(10)
DECLARE @LENTH INT
DECLARE @CURRENT INT
DECLARE @FORMAT VARCHAR(100)
DECLARE @REPEAT VARCHAR(10)
IF NOT EXISTS(SELECT DOC_CODE FROM INV_DOC_FORMAT WHERE [email protected]_CODE)
RETURN ''
SELECT @PRE= PREFIX FROM INV_DOC_FORMAT WHERE [email protected]_CODE
SELECT @SUF= SUFFIX FROM INV_DOC_FORMAT WHERE [email protected]_CODE
SELECT @LENTH= [LENGTH] FROM INV_DOC_FORMAT WHERE [email protected]_CODE
SELECT @CURRENT= [CURRENT] FROM INV_DOC_FORMAT WHERE [email protected]_CODE
SET @REPEAT=REPLICATE('0',(@LENTH-LEN(CONVERT(VARCHAR, @CURRENT))))
SET @[email protected] + @REPEAT +CONVERT(VARCHAR, @CURRENT+1) + @SUF
RETURN @FORMAT
END
可以使用的功能等:
INSERT INTO INV_UNIT(UNIT_CODE,UNIT_NAME,UNIT_ALIAS,APPROVED,APPROVED_USER_ID,APPROVED_DATE)
VALUES(DBO.GET_DOC_FORMAT('01'),@Unit_Name,@Unit_Alias,@APPROVED,@APPROVED_USER_ID,@APPROVED_DATE)
--After Transaction Successfully complete, You can
UPDATE INV_DOC_FORMAT SET [CURRENT]=[CURRENT]+1 WHERE DOC_CODE='01'
或者,你可以創建一個單一的程序這將獨自處理所有的事情太多。
希望你得到的方式......
因此, 看你的路,你這是一個錯誤。 你得到 SET @lastEmpID = ( SELECT TOP 1的Employee_ID FROM tblEmployee ORDER BY的Employee_ID DESC )
末員工ID,然後你操縱ID的其餘部分。這將創建或重新使用先前生成的ID,但現在已刪除。 假設EMP0010在那裏。經過一天EMP被刪除。所以,當你下一次再次創建一個Employeee時,你會得到與之前僱傭的人相同的Emp ID,但是不會再有更多的退出。我不認爲這是一個好主意。
,取而代之的是:
DECLARE @NewEmployeeID as VARCHAR(6)
IF @numEmp < 10
SET @NewEmployee = SELECT 'EP000' + CONVERT(@EmpID)
IF @numEmp < 100
SET @NewEmployee = SELECT 'EP00' + CONVERT(@EmpID)
IF @numEmp < 1000
SET @NewEmployee = SELECT 'EP0' + CONVERT(@EmpID)
IF @numEmp >= 1000
SET @NewEmployee = SELECT 'EP' + CONVERT(@EmpID)
您用來重複一個零。您將使用SQL的複製函數()。像上面的例子一樣。
SET @REPEAT=REPLICATE('0',(@LENTH-LEN(CONVERT(VARCHAR, @CURRENT))))
這將是容易得多本身(可能是'IDENTITY'列)在列的數字部分存儲,然後有一個產生計算列這個格式化的值。在這種情況下,無論您是否有專欄來存儲前綴或只是將其硬編碼爲「EP」,都是一個設計決策。 –