教学之友,学习之友。

站长教学网

当前位置: 站长教学网 > 数据库 > MSSQL教程 >

通过SQL语句生成由字母、日期、数字等组成编号(2)

时间:2012-03-28 11:19来源:未知 作者:ken 点击:

我们看到一个单据编号写一个函数,两个呢....上百个呢,总不可能写一百个函数,关键是他们基本相同。

比如那个进销存网站有采购订货、采购入库...销售签单、销售出库...库存管理的调拨、货品盘点等等保存数据都会产生单据编号。

可以写个通用的函数,其他要用的话,只要调用就行。以下是个人写的:通用存储过程

代码
------------------------------------
--
--
/*

*作 者:lin sen
*功能说明:返回自动流水编号的存储过程
*编写日期:2010-12-23
*/
------------------------------------
DROP PROCEDURE PRO_AutoLSH
GO
CREATE PROCEDURE PRO_AutoLSH
(
@letter varchar(10), --首字母,可以多个字母
@LSHkey varchar(20), --表中的流水号列名,最好是主键
@tablename varchar(20) --表名
)
AS
begin
DECLARE @LSHID NVARCHAR(20)
DECLARE @TLSH VARCHAR(20)
DECLARE @NUM INT
DECLARE @sql NVARCHAR(200)

----查询该表最大的流水号
SET @sql='SELECT ISNULL(MAX(CONVERT(INT,SUBSTRING('+@LSHkey+',8,4))),0)+1 FROM '+@tablename
--创建临时表
CREATE TABLE TEMP1(TOTAL INT);
--写入查询得到的数据
INSERT INTO TEMP1 EXEC(@sql);
--再查询出值
SET @NUM=(SELECT TOTAL FROM TEMP1)
DROP TABLE TEMP1

--拼接下一个流水号:J+年份4位+月份2位+4位编号(如J2010120001)
SET @TLSH=@letter+SUBSTRING(CONVERT(VARCHAR(100),GETDATE(),112),1,6)+SUBSTRING(CONVERT(CHAR(5),10000+@NUM),2,4)
SET @sql=''
SET @sql='SELECT @LSH='+''''+@TLSH+''''+' FROM '+@tablename

EXEC sp_executesql
@sql,
N
'@LSH NVARCHAR(20) OUTPUT',
@LSHID OUTPUT
SELECT @LSHID
end

貌似exec在标量值函数中不能使用,所以本人采用存储过程。本来是想用两个exec试行,可惜不行有问题,所以借鉴他人的做法

采用sp_executesql。如果想要了解EXEC与sp_executesql的区别及应用,原文来自于http://hi.baidu.com/handboy/blog/item/d2f961c8839b60187f3e6f04.html如若要转载请注明此处。

这个通用函数有个特点就是这个网站中所有的单据编号的长度是一致的,就像进销存的一般单据编号。当然这个地方应该也可以写成通用的不限制长度。

有一次听到一位同学去应聘的时候公司让它写流水编号,用CS。这个我想一样道理可以采用StringBuilder进行拼接,前提也是最取数据库中最大值。

像上面说的那个进销存里面有很多操作,似乎要写很多存储过称或函数,页面也差不多。这个可以去网站找找通用增删改查存储过程,页面也是可以封装的。

(责任编辑:ken)
TAG标签: sql Oracle server 语句 生成
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容