如何将自定义PatientID标识序列整合至现有SQL存储过程?
问题描述
首次在项目中使用自定义标识序列,现有一个向数据库插入新记录的存储过程,想把以下脚本整合进去,但不知道怎么操作:
PatientID AS '23-' + RIGHT('0000000' + CAST(PatientID AS NVARCHAR(3)), 3) PERSISTED
尝试添加到存储过程的这段位置:
@GroundServiceDate NVARCHAR(100), @GroundInvoice NVARCHAR(100), @GroundPaymentMethod NVARCHAR(50), @GroundVoucherId NVARCHAR(100) AS BEGIN SET NOCOUNT ON; PatientID AS '23-' + RIGHT('0000000' + CAST(PatientID AS NVARCHAR(3)),3) PERSISTED INSERT INTO tblReferrals (PatientID, ReferralNumber, AssignedReviewer, S
解决方案
你写的那行代码是SQL Server表的持久化计算列定义语法,不能直接放在存储过程的执行逻辑里,分两种场景处理:
场景1:让表自动维护带格式的PatientID(持久化存储)
如果希望每次插入/更新时,表自动生成23-XXX格式的PatientID并持久化存储,需要修改tblReferrals的表结构,添加计算列:
ALTER TABLE tblReferrals ADD FormattedPatientID AS '23-' + RIGHT('0000000' + CAST(PatientID AS NVARCHAR(3)), 3) PERSISTED;
注意:不能直接用
PatientID作为计算列名(原表已存在该字段),需换用新名称比如FormattedPatientID。如果原表没有基础的自增/序列类型PatientID字段,得先添加该基础字段,再基于它生成格式化列。
修改表结构后,存储过程插入时只需处理基础PatientID(自增列无需手动插入),格式化列会自动生成。
场景2:仅在插入时生成格式化ID存入表中
如果不需要表自动维护,只是本次插入时生成23-XXX格式的ID直接存入PatientID字段,直接在INSERT语句里嵌入计算逻辑即可:
-- 存储过程里的INSERT部分修改为如下形式 INSERT INTO tblReferrals (PatientID, ReferralNumber, AssignedReviewer, ...) VALUES ( '23-' + RIGHT('0000000' + CAST(@基础序号变量 AS NVARCHAR(3)), 3), @ReferralNumber, @AssignedReviewer, ... -- 其他对应参数 );
需将
@基础序号变量替换为你用来生成序号的变量(比如自增ID的下一个值、单独维护的序列值)。如果依赖自增列,可先通过IDENT_CURRENT('tblReferrals')+1获取预估自增值,注意处理并发场景下的序号冲突问题。
内容的提问来源于stack exchange,提问作者spades0001
相关产品推荐
相关产品推荐

