<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>存储过程 on 冯威的博客</title><link>https://fwhyy.com/tags/%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B/</link><description>Recent content in 存储过程 on 冯威的博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Wed, 31 Oct 2007 00:00:00 +0800</lastBuildDate><atom:link href="https://fwhyy.com/tags/%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B/atom.xml" rel="self" type="application/rss+xml"/><item><title>存储过程生成流水号</title><link>https://fwhyy.com/2007/10/stored-procedure-to-generate-a-serial-number/</link><pubDate>Wed, 31 Oct 2007 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2007/10/stored-procedure-to-generate-a-serial-number/</guid><description>&lt;h2 id="首先在数据库中创建一个存放流水号的表"&gt;首先在数据库中创建一个存放流水号的表&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;CREATE TABLE [dbo].[NumSeq] (
 [Cate] [varchar] (2) NOT NULL ,
 [DateNo] [varchar] (4) NOT NULL ,
 [Seq] [int] NULL ,
 [CrTime] [datetime] NOT NULL
)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;上面的代码中，Cate 字段为流水号的头，可以在下面的存储过程中用参数的方式传入，我的定义是2个字符，这个可以根据具体需要更改&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DateNo 字段为获取日期信息&lt;/li&gt;
&lt;li&gt;Seq 字段为流水号，但最终生成的流水号是这三个字段的相加&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="创建存储过程"&gt;创建存储过程&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;CREATE PROC dpPMT_SGetMaintainSeq
@MaintainCate VARCHAR(2)

AS
--***********************累加编号*************************************************
DECLARE @MaintainNo VARCHAR(12)
IF NOT EXISTS(SELECT
 *
 FROM
 NumSeq
 WHERE
 Cate=@MaintainCate AND DATEDIFF(DAY,CrTime,GETDATE())=0)
 BEGIN
 INSERT INTO
 NumSeq(Cate,DateNo,Seq)
 values(@MaintainCate,RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+
 REPLICATE(&amp;#39;0&amp;#39;,2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE())),0)

 END
ELSE
 BEGIN
 UPDATE
 NumSeq
 SET
 Seq=Seq+1
 WHERE
 Cate=@MaintainCate AND DateNo=RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+
 REPLICATE(&amp;#39;0&amp;#39;,2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE()))
 END

--************************组合编号***************************************************************
SELECT
 @MaintainNo=Cate+DateNo+REPLICATE(&amp;#39;0&amp;#39;,6-LEN(Seq))+CONVERT(VARCHAR(6),Seq)
FROM
 NumSeq
WHERE
 Cate=@MaintainCate AND DateNo=RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+
 REPLICATE(&amp;#39;0&amp;#39;,2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE()))

SELECT @MaintainNo
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个存储过程最终输出的结果如：AA071031000001 前面两位是传入的参数，中间四位是年份的后两位和月，最后的六位为6位数字的流水号。您也可以修改上面的存储过程来生成符合您要求的流水号&lt;/p&gt;</description></item></channel></rss>