在筛选表格中我有StudyID。 StudyID是两个数字StudyType(For Cases = KNH-01,For Controls = KNH-02)和Serealized 5位数(00001,00002)的组合。所以筛选表看起来像这样;
ID StudyID Age
1 KNH-01/00001 22
2 KNH-01/00002 15
3 KNH-02/00001 4
4 KNH-02/00002 28
目前,StudyID号码被手动保存在日志中,我希望自动化生成StudyID号码的过程。我创建了一个表来管理StudyID
CREATE TABLE [dbo].[PatientID](
[ID] [int] IDENTITY(1,1) NOT NULL,
[PatientType] [varchar](5) NULL,
[PatientNumber] [int] NULL,
CONSTRAINT [PK__PatientI__3214EC2739E294A9] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
根据PatientNumber
我无法获得最后PatientType
我的意图是当用户点击生成StudyID时在vb.net前端有一个按钮,它会检查最后给定的数字一个studytype为它添加1并加载形成。例如KNH-01/00003
或KNH-02/00003
。如果你有更好的想法,我将非常感激。
答案 0 :(得分:0)
嗯,我个人最喜欢的解决此类需求的方法是使用计算列和UDF来计算该列中的值。
首先,您创建UDF:
CREATE FUNCTION dbo.GenerateStudyID (
@PatientType varchar(5),
@id int
)
RETURNS char(11)
AS
BEGIN
RETURN (
SELECT @PatientType +'/'+ RIGHT('00000', CAST(COUNT(*) as char(5)), 5)
FROM [dbo].[PatientID]
WHERE PatientType = @PatientType
AND Id <= @id
)
END
GO
然后,将计算列添加到表中:
ALTER TABLE [dbo].[PatientID]
ADD StudyID as dbo.GenerateStudyID (PatientType, id)
GO
请注意如果您需要保留此列,则无法使用此方法,因为一旦删除记录,值就会更改。