資料庫設計 系統編碼規則的自定義

2022-03-11 23:58:36 字數 4019 閱讀 5286

系統編碼規則的自定義

sqlserver的實現

本文的思路是依據不同的設定得到不同的單據號,全資料庫儲存過程實現!

create table tcore_coderule

(coderuleid varchar(80) not null,

head varchar(6) null,

middlerule varchar(8) null,

length int not null default 4,

tail varchar(8) null,

describe varchar(200) null,

recordday varchar(10) null,

record int null,

state bit not null default '1',

constraint tcore_coderule_pk primary key(coderuleid))go

create procedure pget_coderule

@@coderuleid varchar(80), @@resultcode varchar(40) output

--with encryption

asbegin

if((select count(*) from   tcore_coderule where  coderuleid = @@coderuleid) =0)

begin

print 'not  exists [' + @@coderuleid+']'

select @@resultcode = ''

return

enddeclare @head varchar(6)

declare @middlerule varchar(8)

declare @length int

declare @tail varchar(8)

declare @recordday varchar(10)

declare @record int

declare @state bit

select @head = head,@middlerule = middlerule,@length = length, @tail = tail, @recordday = recordday, @record = record, @state = state

from   tcore_coderule

where  coderuleid = @@coderuleid

if (@state = '0')

begin

print 'state == 0  [' + @@coderuleid+']'

select @@resultcode = ''

return

endselect @@resultcode = @head

if (@middlerule ='yyyymmdd')

begin

select @middlerule =  convert(varchar(8),getdate(),112)

endelse if (@middlerule = 'yymmdd')

begin

select  @middlerule =  substring(convert(varchar(8),getdate(),112),3,8)

endelse if (@middlerule = 'mmdd')

begin

select @middlerule =   substring(convert(varchar(8),getdate(),112),5,8)

endelse

begin

select @middlerule = isnull(@middlerule,'')

endselect @@resultcode = @@resultcode + @middlerule

if (@recordday = @middlerule)

begin

select @record = @record + 1

update tcore_coderule

set record = @record

where coderuleid = @@coderuleid

endelse if (@recordday is not null)

begin

select @record = 1

update tcore_coderule

set record = @record, recordday = @middlerule

where coderuleid = @@coderuleid

endelse

begin

select @record = @record + 1

update tcore_coderule

set record = @record

where coderuleid = @@coderuleid

endselect @@resultcode = @@resultcode + replicate('0',@length - len(convert(varchar(10),@record))) + convert(varchar(10),@record)

if (@tail ='yyyymmdd')

begin

select @@resultcode = @@resultcode + convert(varchar(8),getdate(),112)

endelse if (@tail = 'yymmdd')

begin

select  @@resultcode = @@resultcode + substring(convert(varchar(8),getdate(),112),3,8)

endelse if (@tail = 'mmdd')

begin

select @@resultcode =  @@resultcode + substring(convert(varchar(8),getdate(),112),5,8)

endelse

begin

select @tail = isnull(@tail,'')

select @@resultcode =  @@resultcode + @tail

endreturn

endgo

應用舉例:

表記錄:

執行前:

coderuleid                  head      middlerule          length    tail recordday      record      state

bookmark.recordid    b            yyyymmdd    6            20051124               2               1

document.recordid      d           yyyymmdd    6            20051025               1               1

執行取值:

exec pget_coderule 'bookmark.recordid',''

得到:result: b20060125000001

改變表記錄:

coderuleid                  head      middlerule          length    tail recordday      record      state

bookmark.recordid    b            yyyymmdd    6            20050125               1               1

document.recordid      d           yyyymmdd    6            20051025               1               1

呵呵 以上的一點小技巧希望能夠對大家有所啟發:)

關於自定義字段,資料庫設計

一般企業級管理系統,都會存在某些功能模組資料資訊,可以讓使用者在原有欄位上新增n個自定義字段資訊 欄位名 資料型別 是否必選 排序等 這些自定義字段資訊,可以用於編輯 查詢 統計等。請問這種自定義字段,資料庫應該怎麼樣去設計。可以相對保證查詢效率?暫時有兩種方案 1.直接與物理表結構對映,欄位的調整...

自定義mysql資料庫函式 資料庫自定義函式

這個為通用過濾關鍵字的函式,若有其他關鍵字未新增可以參考語法加入。use db go object userdefinedfunction dbo f filterstring script date 12 09 2013 17 03 45 set ansi nulls on go set quot...

資料庫PostrageSQL 自定義選項

這個特性被設計用來由附加模組向postgresql新增通常不為系統知道的引數 例如過程語言 這允許使用標準方法配製擴充套件模組。自定義選項有兩部分名稱 乙個副檔名,然後是乙個句點,再然後是正確的引數名,就像sql 中的合格名稱。乙個例子是plpgsql.variable conflict。因為自定義...