2012-08-06 112 views
0

保留序列号我有表以下字段删除记录,但在数据库

VouhcerID, VoucherNumber, VoucherDate, etc... 

现在的情况是,当一些凭证被拒绝。我不需要保留数据库中的记录,但序列号应保留在数据库中。假设我在序列号为JV001, JV002, JV003的数据库中有以下记录现在如果JV003被拒绝。它的数据库记录应该被拒绝,但是当新记录被插入时,它应该得到JV004作为VoucherNumber。一种方法是在数据库中添加一个名为isdeleted的布尔型字段,并在记录被拒绝时将其设置为true。任何其他暗示

+0

比方说当JV003被拒绝时,你想对其他字段值做什么?你想从表中删除它们,只是将序列号与其余字段保持为空,或者你只是想从表中删除整行,无论何时插入新行,获取序列号为JV004? – AnandPhadke 2012-08-06 07:01:32

+0

理想情况下,我想完全删除数据库中的行。将所有其他字段保留为空可能不可行,因为我必须允许所有其他字段采用空值 – Tassadaque 2012-08-06 07:21:47

回答

0

我认为你的选择听起来不错。

另一种选择是单独的列中的两列

柱1:包含列的非整数部分(即,JV在上面的例子)
第2栏:包含数字部分您可以将其设置为int identity列,该列将保留序列号。

而且你要两列相结合,为ID列

0

如何创建“计算列”。例如:( 'JV' + CONVERT(nvarchar的,[·REC_ID],(0)))

+0

凭证号码在年末时重置 – Tassadaque 2012-08-06 06:08:44

+0

我认为自动增量列可以在使用查询“ DBCC CHECKIDENT(mytable,RESEED,0)“。 – TechDo 2012-08-06 06:32:48

0

alter table来添加标识列和whenver有新的插入,只要插入这样的:

alter table yourtable add id int identity(1,1) 
    INSERT INTO yourtable(VouhcerID,...) 
    select 'JV'+CASE WHEN len(cast(id as varchar)=1 then '00'+cast(id as varchar) else CASE WHEN len(cast(id as varchar)=2 then '0'+cast(id as varchar) else cast(id as varchar) end end,... from table