1 DECLARE @fn VARCHAR(100) --序列号字典中某规则的名称
2 DECLARE @glide VARCHAR(100)
3 SET @fn='2010'
4 EXEC GETGLIDE @fn, @glide OUTPUT
5 PRINT @glide
6 /***************************************************************************************************************************/
7 DELETE FROM sys_business_glide
8
9 INSERT INTO sys_business_glide(
10 FNAME,
11 glide,
12 PREFIX,
13 POSTFIX,
14 DATEGLIDE,
15 GLIDELEN
16 )VALUES(
17 '2010',
18 9999,
19 '',
20 '',
21 '1',
22 12
23 )
24 ;
25 UPDATE sys_business_glide SET glide=glide+9998
26 WHERE fname='2010'
27
28 SELECT * FROM sys_business_glide
29
30
31 DROP TABLE sys_business_glide
32
33 SELECT * FROM sys_business_glide
34
35 /*********************************************************************************************************************/
36 CREATE TABLE sys_business_glide(
37 FNAME VARCHAR(100),--用于区分的流号名称
38 GLIDE INT,--当前序列号值
39 PREFIX VARCHAR(4),--序列号前缀
40 POSTFIX VARCHAR(4),--序列号后缀
41 DATEGLIDE CHAR(1),--是否包含时间 (1 包含 0 不包含)
42 GLIDELEN INT,--序列号长
43 GLIDEDATE DATETIME DEFAULT GETDATE() --当前序列所在日期值
44 );
45
46 ALTER PROCEDURE [dbo].[GETGLIDE]
47 @fn VARCHAR(100) ,--序列号字典中某规则的名称
48 @glide VARCHAR(100) OUTPUT--输出当前序列号
49 AS
50 DECLARE @i INT = 0 ,
51 @strlen INT = 0 ,
52 @strtemp VARCHAR(20) = '' ,
53 @exception INT= 0 ,
54 @t_count INT= 0 ,--当前序列号值(变化部分)
55 @PREFIX VARCHAR(4) ,--前缀
56 @POSTFIX VARCHAR(4) ,--后缀
57 @DATEGLIDE CHAR(1) ,--是否包含时间 (1 包含 0 不包含)
58 @GLIDELEN INT,--序列号总长度
59 @GLIDEDATE DATETIME;--当前序列所在日期值
60 BEGIN
61 ----初始值
62 SELECT @exception = COUNT(*)
63 FROM sys_business_glide WITH(NOLOCK)
64 WHERE FNAME = @fn;
65
66 SELECT @t_count= GLIDE ,
67 @PREFIX = PREFIX ,
68 @POSTFIX = POSTFIX ,
69 @DATEGLIDE = DATEGLIDE ,
70 @GLIDELEN = GLIDELEN,
71 @GLIDEDATE= GLIDEDATE
72 FROM sys_business_glide WITH(NOLOCK)
73 WHERE FNAME = @fn;
74
75
76 IF ( @exception = 0 )
77 BEGIN
78 ----不存在此序列号
79 SET @glide = '当前不存在此名称的序列号规则';
80 END;
81 ELSE
82 BEGIN
83 ----存在此序列号
84 SET @t_count = @t_count + 1;
85 --------拼接序列号
86 IF ( @DATEGLIDE = '1' )
87 --包含时间
88 BEGIN
89 SET @strlen = LEN(@PREFIX+ REPLACE(CONVERT(VARCHAR(10), @GLIDEDATE, 23),'-', '')
90 + CAST(@t_count AS VARCHAR)
91 + @POSTFIX);
92 IF ( @GLIDELEN > @strlen )
93 --需补0
94 BEGIN
95 WHILE @i < ( @GLIDELEN - @strlen )
96 BEGIN
97 SET @strtemp = @strtemp + '0';
98 SET @i = @i + 1;
99 END;
100 SET @glide = @PREFIX
101 + REPLACE(CONVERT(VARCHAR(10), @GLIDEDATE, 23), '-', '') + @strtemp
102 + CAST(@t_count AS VARCHAR) + @POSTFIX;
103 END;
104 ELSE
105 IF ( @GLIDELEN = @strlen )
106 --不需要补0
107 BEGIN
108 SET @glide = @PREFIX
109 + REPLACE(CONVERT(VARCHAR(10),@GLIDEDATE, 23),
110 '-', '')
111 + CAST(@t_count AS VARCHAR) + @POSTFIX;
112 END;
113 ELSE
114 --长度超出
115 BEGIN
116 --SET @glide = '序列号长度设置有问题';
117 UPDATE sys_business_glide
118 SET GLIDEDATE=DATEADD(DAY,1,GLIDEDATE)
119 WHERE FNAME = @fn;
120 SET @GLIDEDATE = DATEADD(DAY,1,@GLIDEDATE);
121
122 SET @t_count=1;
123 SET @strlen = LEN(@PREFIX+ REPLACE(CONVERT(VARCHAR(10), @GLIDEDATE, 23),'-', '')
124 + CAST(@t_count AS VARCHAR)
125 + @POSTFIX);
126 IF ( @GLIDELEN > @strlen )
127 --需补0
128 BEGIN
129 WHILE @i < ( @GLIDELEN - @strlen )
130 BEGIN
131 SET @strtemp = @strtemp + '0';
132 SET @i = @i + 1;
133 END;
134 SET @glide = @PREFIX
135 + REPLACE(CONVERT(VARCHAR(10), @GLIDEDATE, 23), '-', '') + @strtemp
136 + CAST(@t_count AS VARCHAR) + @POSTFIX;
137 END;
138
139 END;
140 END;
141 ELSE
142 --不包含时间
143 BEGIN
144 SET @strlen = LEN(@PREFIX + CAST(@t_count AS VARCHAR)
145 + @POSTFIX);
146 IF ( @GLIDELEN > @strlen )
147 --需补0
148 BEGIN
149 SET @i = 0;
150 WHILE @i < ( @GLIDELEN - @strlen )
151 BEGIN
152 SET @strtemp = @strtemp + '0';
153 SET @i = @i + 1;
154 END;
155 SET @glide = @PREFIX + @strtemp
156 + CAST(@t_count AS VARCHAR) + @POSTFIX;
157 END;
158 ELSE
159 IF ( @GLIDELEN = @strlen )
160 --不需要补0
161 BEGIN
162 SET @glide = @PREFIX
163 + CAST(@t_count AS VARCHAR) + @POSTFIX;
164 END;
165 ELSE
166 --长度超出
167 BEGIN
168 SET @glide = '序列号长度设置有问题';
169 END;
170 END;
171 --------修改当前变化部分值
172 UPDATE sys_business_glide
173 SET glide = CAST(@t_count AS INT)
174 WHERE FNAME = @fn;
175 END;
176 END;