我正在處理案件監控系統,其中我需要做出查詢,這將自動生成案例號。輸入前一個案例的+1。請看看我的查詢自動遞增Sql查詢
select 'A/' +right(cast(year(GETDATE()) as CHAR(4)), 2)+'/'+ + cast(max(right((CaseNo), 2))+1 as varchar(50))as caseno from tbl_RecordRequisition
它工作正常,但之後情況下,沒有。 100它不是遞增到101
請幫助
我正在處理案件監控系統,其中我需要做出查詢,這將自動生成案例號。輸入前一個案例的+1。請看看我的查詢自動遞增Sql查詢
select 'A/' +right(cast(year(GETDATE()) as CHAR(4)), 2)+'/'+ + cast(max(right((CaseNo), 2))+1 as varchar(50))as caseno from tbl_RecordRequisition
它工作正常,但之後情況下,沒有。 100它不是遞增到101
請幫助
一個建議的話:不要試圖手動做到這一點。
唯一可行的解決方案是使用
ID INT IDENTITY(1,1)
列讓SQL Server處理你的數值的自動增量那麼試試這個:
CREATE TABLE dbo.Cases
(ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
CaseID AS 'A/' + RIGHT('00000' + CAST(ID AS VARCHAR(5)), 5) PERSISTED,
.... your other columns here....
)
現在,每次行插入Cases
沒有指定值ID
或CaseID
:
INSERT INTO dbo.Cases(Col1, Col2, ..., ColN)
VALUES (Val1, Val2, ....., ValN)
那麼SQL Server將自動,安全地增加ID
價值,CaseID
將包含類似A/00001
值, A/00002
,......等等 - 自動,安全,可靠,無重複。
更新:,如果你在你的表中的DATE
或DATETIME
列,並且要在該日期的年份的最後兩個數字包括到您的計算列,使用這個公式:
CREATE TABLE dbo.Cases
(ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
CaseDate DATE DEFAULT(GETDATE()),
CaseID AS 'A/' + CAST(YEAR(CaseDate) AS VARCHAR(2)) + '/' +
RIGHT('00000' + CAST(ID AS VARCHAR(5)), 5) PERSISTED,
... (other columns) .....
)
你不能使用,因爲這CAST(YEAR(GETDATE()) ....
將使列不確定性,然後你不能堅持(店)的值了 - 它會在每次訪問時間來計算的,這是我會盡量避免,如果以往任何時候都可能
感謝馬克你的解決方案工作:),但我想插入一年和A之間的最後兩位數字。你會告訴我該怎麼做 –
@ankitsrist:如果你的表中有'DATE'列,那麼我的迴應就會更新,如果你的表中有'DATE'列的話(在我的例子中,我*猜到了*它可能被稱爲' CaseDate' - 適應任何你真正擁有的) –
非常感謝你marc :) –
嘗試這樣
您可以使用row_number()來生成自動編號
如:
SELECT row_number() OVER (ORDER BY casno) n,
casno,
FROM Table1
編輯
SELECT *,row_number(Partition By id,CaseNo) OVER (ORDER BY id) AS CASENO
FROM tbl_RecordRequisition
你會根據你的修改我的查詢 –
你可以給我表和模式 –
CREATE TABLE [dbo]。[tbl_RecordRequisition]( \t [ID] [INT] IDENTITY(1,1)NOT NULL, \t [CaseNo] [VARCHAR(50)NULL, \t [RequNo] [INT] NULL, \t [COMPNAME] [ VARCHAR(50)NULL, \t [RespName] [VARCHAR(50)NULL, \t [FILEDATE] [VARCHAR(50)NULL, \t [NextDate] [VARCHAR(50)NULL, \t [DateOfFilling ] [varchar](50)NULL, \t [區域代碼] [varchar](50)NULL) –
你只提取最後兩個挖掘的CaseNo'右其((CaseNo),2)' – MauriDev
是的,我知道,但如果我使用3它給該誤差變換將varchar值「4/9」爲數據類型int時 –
轉換失敗。 –