我在SQL Server 2016数据库中有三个表,事件,种族,季节。 Races表是PK for Events表和PK for Seasons表的复合主键。我想零填充事件表主键的主键,使其为3位数。比赛所需的复合键的格式为2018001,其中2018是seasonId,001是eventId。
我也在使用EF6和数据库第一种方法。这是一个合理的计划,如果是这样的话,如何将Events表设置为使用正确的零填充自动递增?
答案 0 :(得分:0)
当使用非数据库第一种方法时,这就是为什么需要sql人员;)。
零填充似乎是一个随意的要求,虽然它看起来很酷,但从功能上来说它会引起问题。通过谷歌查找邮政编码问题,以了解有关类似挑战的更多信息。
我建议tableid int identity(1,1) not null
代替密钥。填充是在usp_中的事实之后完成的,您返回结果。
答案 1 :(得分:0)
我建议使用三列,eventid,seasonID和DisplayId。这样,您可以正确连接查询的int字段,并使用计算字段填充DisplayID的数字。请注意,这会稍微减慢插入和更新,但考虑到表的性质,它可能不会是显而易见的。最好在插入数据库中进行一次填充,每次调用数据时都要浪费时间进行计算,所以这不属于表示层。
您在SQl服务器中填充的方式是使用权限并一起复制,类似于此
right(replicate ('0',4)+ cast(event_id as Varchar(20)), 10)
确保填充足够的空间以覆盖您可以设想该数据库在一年内拥有的最大事件数。
然后与赛季结合:
Cast(seasonId as varchar(4)) + right(replicate ('0',4)+ cast(event_id as Varchar(20)), 10)
在创建计算字段时执行此操作(并保留计算字段,因此不必继续重新创建。
有关如何创建计算字段的信息,请参阅此问题: