我正在工作的案件监测系统,在其中,我需要作出查询,将自动生成案件编号。+1与上一宗案件有关。请看一下我的查询
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。
请帮帮忙
发布于 2014-01-30 10:34:07
有一个建议:不要尝试手工操作。
唯一可行的解决办法是使用
ID INT IDENTITY(1,1)列,用于使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)然后Server将自动和安全地增加ID值,而CaseID将包含A/00001、A/00002、.等等-自动,安全,可靠,没有重复。
Update:如果表中有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()) ....,因为这会使列不确定,然后就不能再保存(存储)值了--每次访问它时都必须计算它,如果可能的话,这是我会尽量避免的。
发布于 2014-01-30 10:24:40
试着像这样
可以使用数()生成AutoNumber
Eg:
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_RecordRequisitionhttps://stackoverflow.com/questions/21453637
复制相似问题