2012-08-06 130 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