数据库自动生成自定义订单号

本文介绍如何在SQL Server和Access数据库中通过自定义函数实现订单号的自动生成。SQL Server部分采用视图结合用户定义函数的方式,确保订单号唯一且包含日期和流水号信息;Access部分则通过VBA函数实现类似功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL  Server数据库自动生成自定义订单号

ContractedBlock.gifExpandedBlockStart.gif代码
/*以下代码生成的编号长度为14,前6位为日期信息,格式为YYYYMMDD,后6位为流水号。创建得到当前日期的视图,因为在用户定义函数不能使用不确定函数,而getdate就是不确定函数,必须建立一个视图才能获得getdate的值。*/
CREATE VIEW dbo.v_GetDate
AS
SELECT CONVERT(CHAR(8), GETDATE(), 112) AS dt

//创建SQL Server数据库中的自定义函数
CREATE FUNCTION f_NextBH()
RETURNS char(14)
AS
BEGIN
DECLARE @dt CHAR(8)
SELECT @dt=dt FROM v_GetDate
RETURN(
SELECT @dt+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6)
FROM test_orderid WITH(XLOCK,PAGLOCK)
WHERE BH like @dt+'%')
END

//测试表中应用自定义函数
CREATE TABLE tb(
BH
char(14) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col
int)

 

 

access数据库自动生成自定义订单号(access中的模块自定义函数)

ContractedBlock.gifExpandedBlockStart.gif代码
'生成订单序号---格式20090630000001(年月日+6位的流水号)
Function nextBH()
Dim strResult, temp
strResult
= ""
temp
= "000001"
Dim thedb As Database
Set thedb = DBEngine.Workspaces(0).Databases(0)
SQL1
= "select count(BH) AS bhCount from testOrderId WHERE BH like '" & Format(Date, "yyyymmdd") & "*'"
SQL2
= "select MAX(BH) AS MaxBH from testOrderId WHERE BH like '" & Format(Date, "yyyymmdd") & "*'"
Set rs1 = thedb.OpenRecordset(SQL1)
If Not rs1.EOF Then '先查找当天是否有流水号
If rs1.Fields("bhCount") > 0 Then
Set rs2 = thedb.OpenRecordset(SQL2)
If Not rs2.EOF Then '从数据库中得到当天的流水号的最大值
strResult = Format(Date, "yyyymmdd") & Right((CLng("1000001") + Right(temp, 6)), 6) '流水号加1后从右截取6位字符串
End If
Else
strResult
= Format(Date, "yyyymmdd") & "000001"
End If
End If
nextBH
= strResult
End Function

 

 

使用方法:

 

INSERT INTO testOrderId ( BH, description ) VALUES (nextBH(), '1118');

 

转载于:https://www.cnblogs.com/raychn/archive/2010/07/23/1783708.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值