生成單據編號

2022-03-15 02:09:07 字數 2962 閱讀 6643

set ansi_nulls on

goset quoted_identifier on

gocreate procedure [dbo].[sp_getbi](@comp_id varchar(8),@type varchar(50),@flag char(1))

as/*

功能描述:取下乙個編號

引數說明:

@comp_id:公司編號

@type:編號型別

@flag:標誌(r:讀取下乙個編號;w:讀出下乙個編號,同時提交到資料庫)

測試:execute sp_getbi('','','')

select * from sys_number

*/begin

declare @rtn int

--select * from sys_number

--1、如果資料庫沒有則插入資料庫,如果型別為r,則插入0,如果是型別是w,則插入1

if not exists(select * from sys_number where comp_id=@comp_id and number_type=@type)

begin

if upper(@flag)='r'

begin

insert into sys_number(comp_id,number_type,number) values(@comp_id,@type,0)

endelse

begin

insert into sys_number(comp_id,number_type,number) values(@comp_id,@type,1)

end

select 1

return

endelse--1、如果資料庫有,則取出值加1作為n,如果型別為r,則直接返回n,如果是型別是w,修改number為n,返回n

begin

select @rtn=number from sys_number where comp_id=@comp_id and number_type=@type

select @rtn=isnull(@rtn,0) + 1

if upper(@flag)='w'

begin

update sys_number set number=@rtn where comp_id=@comp_id and number_type=@type

end

select @rtn

return

endend

goset ansi_nulls off

goset quoted_identifier off

gogo

/****** 物件: table [dbo].[sys_number] 指令碼日期: 03/21/2013 17:54:41 ******/

set ansi_nulls on

goset quoted_identifier on

goset ansi_padding on

gocreate table [dbo].[sys_number](

[comp_id] [varchar](8) collate chinese_prc_ci_as not null,

[number_type] [varchar](50) collate chinese_prc_ci_as not null,

[number] [int] null,

[memo] [varchar](50) collate chinese_prc_ci_as null,

primary key clustered

([comp_id] asc,

[number_type] asc

)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]

) on [primary]

goset ansi_padding off

goexec sys.sp_addextendedproperty @name=n'ms_description', @value=n'公司編號' , @level0type=n'schema',@level0name=n'dbo', @level1type=n'table',@level1name=n'sys_number', @level2type=n'column',@level2name=n'comp_id'

goexec sys.sp_addextendedproperty @name=n'ms_description', @value=n'編號型別' , @level0type=n'schema',@level0name=n'dbo', @level1type=n'table',@level1name=n'sys_number', @level2type=n'column',@level2name=n'number_type'

goexec sys.sp_addextendedproperty @name=n'ms_description', @value=n'編號' , @level0type=n'schema',@level0name=n'dbo', @level1type=n'table',@level1name=n'sys_number', @level2type=n'column',@level2name=n'number'

goexec sys.sp_addextendedproperty @name=n'ms_description', @value=n'備註' , @level0type=n'schema',@level0name=n'dbo', @level1type=n'table',@level1name=n'sys_number', @level2type=n'column',@level2name=n'memo'

--execute sp_getbi '001','purchase','r'

自動生成單據號

計算id 使用 表級排它鎖 防止使用者同時修改該記錄 create procedure getid xh integer,id integer out as 如果想在連線一中鎖住整個表,不允許其他事務更新表中任何記錄,但可以讀取記錄,可使用holdlock選項,即 holdlock 等同於 seri...

自動生成單據號

計算id 使用 表級排它鎖 防止使用者同時修改該記錄 create procedure getid xh integer,id integer out as 如果想在連線一中鎖住整個表,不允許其他事務更新表中任何記錄,但可以讀取記錄,可使用holdlock選項,即 holdlock 等同於 seri...

單據編號的生成

1.單據編號的構成 為了避免重複及保持有序性,單據編號通常格式為 關鍵字 yymmdd n位流水號,當然具體規則會根據業務需 要變化,包括 年月日的顯示變化和流水號的位數變化 及編號公升序 例如 ys0812250001,ys200812250001,ys2008120001,ys081225001...