急求一种编号生成的设计方案(300分)

luckyprg 2006-11-06 11:42:33
编号的生成方法如下图
http://www.8288.net.cn/setup.jpg

要求可以给用户修改上图设置,然后可以根据设置生成对应格式的编号。
最好是用存储过程或函数来实现这个编号生成,因为我需要在用户新增相关资料时根据上面的设置来生成这个编号。

问题解决即给300分,决不食言。

急求高手帮忙,万分感谢!!!
...全文
1306 57 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
57 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhf_1021 2006-11-09
  • 打赏
  • 举报
回复
OK
luckyprg 2006-11-08
  • 打赏
  • 举报
回复
刚本来还以为有个传值顺序的问题,细心的看了一下程序,发现邹老大已经考虑进去了。

只能用一个词语来形容:PERFECT!

非常感谢!!!

结贴,因一贴只能给100分,另开两贴给剩下的200分。
luckyprg 2006-11-08
  • 打赏
  • 举报
回复
没错,应该可以了,非常感谢!
今明两天特忙,等我后天应用到项目中,就结贴。
wxshzf 2006-11-08
  • 打赏
  • 举报
回复
看不见图片,想学习大侠们讨论的问题
zjcxc 元老 2006-11-07
  • 打赏
  • 举报
回复
to dragonbbc(dragon):

你传入的部分参数为0长度字符, 而不是NULL, 所以出现的编码是那样的.
我的函数中要求该参数不要的时候, 是NULL, 而不是0长度
liutietuo 2006-11-07
  • 打赏
  • 举报
回复
自卑.不懂.UP
dragonbbc 2006-11-07
  • 打赏
  • 举报
回复
回头再仔细看一遍,呵呵
dragonbbc 2006-11-07
  • 打赏
  • 举报
回复
嗯,这下可以了
运行结果如下:
CZH-2006-1-1-AJH-P1 CZH-2006-1-Y-AJH-P1 QZH-1@P1-AJH
yangjianw2004 2006-11-07
  • 打赏
  • 举报
回复
上面的这中方法可行 刚才我实验了~!成功~!
zjcxc 元老 2006-11-07
  • 打赏
  • 举报
回复
2000的数据类型转换真不是东西, 改成上面的就可以了.
zjcxc 元老 2006-11-07
  • 打赏
  • 举报
回复

-- 用于保存用户编号方案的表
CREATE TABLE No(
SortID int,
OrderID int,
NoName varchar(10),
NoLen int,
NoSplit char(1),
NoValue varchar(10), -- NULL 表示从字段取值, 否则取固定值
Diable bit
)
-- 1 号方案
INSERT No SELECT 1, 1, '全宗号', 6, '-', 'CZH', 0
UNION ALL SELECT 1, 2, '归档年度', 4, '-', '<YEAR>', 0
UNION ALL SELECT 1, 3, '分类号', 6, '-', NULL, 0
UNION ALL SELECT 1, 4, '保管期限', 1, '-', NULL, 0
UNION ALL SELECT 1, 5, '案卷号', 3, '-', NULL, 0
UNION ALL SELECT 1, 6, '页号', 3, '-', NULL, 0

-- 2 号方案
INSERT No SELECT 2, 1, '全宗号', 6, '-', NULL, 0
UNION ALL SELECT 2, 2, '归档年度', 4, '-', NULL, 1
UNION ALL SELECT 2, 3, '分类号', 6, '-', NULL, 0
UNION ALL SELECT 2, 6, '保管期限', 1, '-', NULL, 1
UNION ALL SELECT 2, 5, '案卷号', 3, '-', NULL, 0
UNION ALL SELECT 2, 4, '页号', 3, '@', NULL, 0
GO

CREATE VIEW v_GETDATE
AS
SELECT dt = GETDATE()
GO

-- 然后函数中引用这个视图得到日期即可:

-- 一个函数, 用来生成编号
CREATE FUNCTION dbo.f_No(
@SortID int, -- 取第几号方案
@全宗号 varchar(10), -- 下面是与编号相关的各字段的值, 如果该字段不存在, 则设置为NULL
@归档年度 varchar(10),
@分类号 varchar(10),
@保管期限 varchar(10),
@案卷号 varchar(10),
@页号 varchar(10)
)RETURNS varchar(100)
AS
BEGIN
DECLARE @re varchar(100)
DECLARE @GETDATE datetime
SELECT @GETDATE = dt FROM v_GETDATE

SET @re = N''
SELECT @re = @re
+ A.NoSplit + RIGHT(ISNULL(ISNULL(ISNULL(C.value, A.NoValue), B.NoValue), '<NULL>'), A.NoLen)
FROM No A
INNER JOIN(
SELECT NoName = '全宗号', NoValue = @全宗号 UNION ALL
SELECT NoName = '归档年度', NoValue = @归档年度 UNION ALL
SELECT NoName = '分类号', NoValue = @分类号 UNION ALL
SELECT NoName = '保管期限', NoValue = @保管期限 UNION ALL
SELECT NoName = '案卷号', NoValue = @案卷号 UNION ALL
SELECT NoName = '页号', NoValue = @页号
)B
ON A.NoName = B.NoName
LEFT JOIN(
SELECT ValueName = '<YEAR>', Value = CONVERT(varchar(10), CONVERT(char(4), @GETDATE, 120)) UNION ALL
SELECT ValueName = '<MONTH>', Value = RIGHT(CONVERT(char(6), @GETDATE, 120), 2) UNION ALL
SELECT ValueName = '<DAY>', Value = RIGHT(CONVERT(char(8), @GETDATE, 120), 2) UNION ALL
SELECT ValueName = '<永久>', Value = 'Y'
)C
ON ISNULL(A.NoValue, B.NoValue) = C.ValueName
WHERE A.SortID = @SortID
AND A.Diable = 0
ORDER BY A.OrderID
RETURN(STUFF(@re, 1, 1, ''))
END
GO

-- 然后, 可以直接引用这个函数得到编号, 也可以把该函数设置为编号的默认值
SELECT
方案1a = dbo.f_No(1, 'QZH', '2004', '1', '1', 'AJH', 'P1'),
方案1b = dbo.f_No(1, 'QZH', '2004', '1', '<永久>', 'AJH', 'P1'),
方案2 = dbo.f_No(2, 'QZH', '2004', '1', '1', 'AJH', 'P1')
GO

DROP VIEW v_GETDATE
DROP FUNCTION dbo.f_No
DROP TABLE No
zjcxc 元老 2006-11-07
  • 打赏
  • 举报
回复
有点怪, 检查一下你的版本.

luckyprg 2006-11-07
  • 打赏
  • 举报
回复
我是完全复制您的代码到查询分析器中执行的,也就是说传的参数你您传的是一样的。
即:
SELECT
方案1a = dbo.f_No(1, 'QZH', '2004', '1', '1', 'AJH', 'P1'),
方案1b = dbo.f_No(1, 'QZH', '2004', '1', '<永久>', 'AJH', 'P1'),
方案2 = dbo.f_No(2, 'QZH', '2004', '1', '1', 'AJH', 'P1')
qianguob 2006-11-07
  • 打赏
  • 举报
回复
袁老大的肯定能满足了,感觉袁老大写程序的思路非常好,关键是这点,什么时候能够达到这个境界啊。
zjcxc 元老 2006-11-07
  • 打赏
  • 举报
回复
你的参数是怎么传递的? 参数定义表是怎么定义的?
abc_sk 2006-11-07
  • 打赏
  • 举报
回复
s
luckyprg 2006-11-07
  • 打赏
  • 举报
回复
奇怪,我运行邹老大的代码,结果也是:

CZH -2006-1 - -JH -1 CZH -2006-1 - -JH -1 QZH -1 @1 -JH

保管期限不见了。
yuedeem 2006-11-07
  • 打赏
  • 举报
回复
lz这下你可满足了吧
star_ais 2006-11-06
  • 打赏
  • 举报
回复
是啊~我这些操作只是将用户自定义数据保存,等系统加载的时候用的
zjcxc 元老 2006-11-06
  • 打赏
  • 举报
回复
楼主的图片显示, 你的这些编号所需的数据都是来自于其他字段哦.
加载更多回复(37)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧