自动生成字符的SQL标识

自动生成字符的SQL标识,sql,sql-server,Sql,Sql Server,我有下表:使用SQL Server create table PoojaDetails ( PoojaDetailsID int identity constraint pk_PoojaDetailsID Primary Key, ReceiptNo AS 'PB' + '/' + datepart(yy,getdate()) + '/' + RIGHT('000000' + CAST(PoojaDetailsID AS VARCHAR(10)), 6) PERSISTED,

我有下表:使用SQL Server

create table PoojaDetails
(
    PoojaDetailsID int identity constraint pk_PoojaDetailsID Primary Key, 
    ReceiptNo AS 'PB' + '/' + datepart(yy,getdate()) + '/' + RIGHT('000000' + CAST(PoojaDetailsID AS VARCHAR(10)), 6) PERSISTED,
    ReceiptDate datetime not null constraint df_ReceiptDate default getdate(),
    FirstName varchar(100) not null,
    LastName varchar(100) not null,
    TelNo bigint
)
执行查询时:无法持久化表“PoojaDetails”中的计算列“ReceiptNo”,因为该列是非确定性的

我希望收据编号为:PB/年/号 例如:;PB/13/213433


有什么想法吗???感谢您的时间

如果您可以依赖于始终由其默认约束填充且从不更改的ReceiptDate,那么您可以使用它来代替计算列中的getdate():

create table PoojaDetails
(
    PoojaDetailsID int identity constraint pk_PoojaDetailsID Primary Key, 
    ReceiptNo AS 'PB' + '/' + CONVERT(varchar(5),datepart(yy,ReceiptDate)) + '/' + RIGHT('000000' + CAST(PoojaDetailsID AS VARCHAR(10)), 6) PERSISTED,
    ReceiptDate datetime not null constraint df_ReceiptDate default getdate(),
    FirstName varchar(100) not null,
    LastName varchar(100) not null,
    TelNo bigint
)
请试一试

create table PoojaDetails
(
    PoojaDetailsID int identity constraint pk_PoojaDetailsID  Primary Key, 
    ReceiptNo  AS 'PB' + '/' + cast(datepart(yy,getdate()) as varchar(25)) + '/' + RIGHT('000000' + CAST(PoojaDetailsID AS VARCHAR(10)), 6) ,
    ReceiptDate datetime not null constraint df_ReceiptDate default getdate(),
    FirstName varchar(100) not null,
    LastName varchar(100) not null,
    TelNo bigint
)

亲爱的Damien_,不相信此查询的人已成功开始创建,但当我们执行select查询时,它给出了错误它给出了错误----将varchar值“PB/”转换为数据类型int时转换失败。不,当调用
getdate()
时,它不能
持久化。