存储过程生成流水号----灵活版
2011-07-05 09:16
330 查看
SQL SERVER 2000 存储过程生成编号-流水号 2008-06-24 21:32表:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[NumSeq]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[NumSeq]
GO
CREATE TABLE [dbo].[NumSeq] (
[Prefix] [varchar] (6) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Seq] [int] NOT NULL ,
[LastDate] [datetime] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[NumSeq] WITH NOCHECK ADD
CONSTRAINT [PK_NumSeq] PRIMARY KEY CLUSTERED
(
[Prefix]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[NumSeq] ADD
CONSTRAINT [DF_NumSeq_Prefix] DEFAULT (0) FOR [Prefix],
CONSTRAINT [DF_NumSeq_Seq] DEFAULT (0) FOR [Seq],
CONSTRAINT [DF_NumSeq_LastDate] DEFAULT (getdate()) FOR [LastDate]
GO
存储过程:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetSeqNum]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[GetSeqNum]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE GetSeqNum
@Prefix VARCHAR(6)
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
DECLARE
@Seq INT,
@LastDate DATETIME,
@Now DATETIME,
@MaintainNo VARCHAR(20)
----INIT
SELECT @Now=GETDATE()
----INSERT
IF NOT EXISTS(SELECT * FROM NumSeq WHERE Prefix=@Prefix)
BEGIN
INSERT INTO NumSeq(Prefix,Seq,LastDate) VALUES(UPPER(@Prefix),0,@Now)
END
--GET LastDate
SELECT @LastDate=LastDate FROM NumSeq WHERE Prefix=@Prefix
----IF LastDate > Now
IF(@LastDate > @Now)
BEGIN
RAISERROR ('LastDate < Now ,Please check system time.' , 16, 1) WITH NOWAIT
ROLLBACK TRANSACTION
RETURN 0
END ELSE BEGIN
----UPDATE
IF (DATEDIFF(DAY,@LastDate,@Now)<>0)
BEGIN
UPDATE NumSeq SET LastDate=@NOW,Seq=1 WHERE Prefix=@Prefix
END ELSE BEGIN
UPDATE NumSeq SET Seq=Seq + 1 WHERE Prefix=@Prefix
END
----Get Seq Num
SELECT @Seq=Seq FROM NumSeq WHERE Prefix=@Prefix
SELECT @MaintainNo=UPPER(@Prefix) + CONVERT(VARCHAR(12), @Now,112) + RIGHT('000000' + CONVERT(VARCHAR(6),@Seq),6)
----Return
SELECT @MaintainNo
END
COMMIT TRANSACTION
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
执行 exec getseqnum 'aaa',输出 AAA20080624000003
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[NumSeq]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[NumSeq]
GO
CREATE TABLE [dbo].[NumSeq] (
[Prefix] [varchar] (6) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Seq] [int] NOT NULL ,
[LastDate] [datetime] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[NumSeq] WITH NOCHECK ADD
CONSTRAINT [PK_NumSeq] PRIMARY KEY CLUSTERED
(
[Prefix]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[NumSeq] ADD
CONSTRAINT [DF_NumSeq_Prefix] DEFAULT (0) FOR [Prefix],
CONSTRAINT [DF_NumSeq_Seq] DEFAULT (0) FOR [Seq],
CONSTRAINT [DF_NumSeq_LastDate] DEFAULT (getdate()) FOR [LastDate]
GO
存储过程:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetSeqNum]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[GetSeqNum]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE GetSeqNum
@Prefix VARCHAR(6)
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
DECLARE
@Seq INT,
@LastDate DATETIME,
@Now DATETIME,
@MaintainNo VARCHAR(20)
----INIT
SELECT @Now=GETDATE()
----INSERT
IF NOT EXISTS(SELECT * FROM NumSeq WHERE Prefix=@Prefix)
BEGIN
INSERT INTO NumSeq(Prefix,Seq,LastDate) VALUES(UPPER(@Prefix),0,@Now)
END
--GET LastDate
SELECT @LastDate=LastDate FROM NumSeq WHERE Prefix=@Prefix
----IF LastDate > Now
IF(@LastDate > @Now)
BEGIN
RAISERROR ('LastDate < Now ,Please check system time.' , 16, 1) WITH NOWAIT
ROLLBACK TRANSACTION
RETURN 0
END ELSE BEGIN
----UPDATE
IF (DATEDIFF(DAY,@LastDate,@Now)<>0)
BEGIN
UPDATE NumSeq SET LastDate=@NOW,Seq=1 WHERE Prefix=@Prefix
END ELSE BEGIN
UPDATE NumSeq SET Seq=Seq + 1 WHERE Prefix=@Prefix
END
----Get Seq Num
SELECT @Seq=Seq FROM NumSeq WHERE Prefix=@Prefix
SELECT @MaintainNo=UPPER(@Prefix) + CONVERT(VARCHAR(12), @Now,112) + RIGHT('000000' + CONVERT(VARCHAR(6),@Seq),6)
----Return
SELECT @MaintainNo
END
COMMIT TRANSACTION
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
执行 exec getseqnum 'aaa',输出 AAA20080624000003
相关文章推荐
- SQL存储过程生成流水号
- 一个用来生成流水号的存储过程
- 实用的银行转账存储过程和流水号生成存储过程
- 存储过程生成流水号
- SLQ生成订单号 序列码 流水号的存储过程
- SQLserver 存储过程生成任意进制/顺序流水号
- 一个生成订单流水号的存储过程
- SQL存储过程生成流水号
- SQL Server 存储过程生成流水号
- 根据日期+顺序号生成流水号的存储过程
- 一个用来生成流水号的存储过程
- 一个MSSql的存储过程---生成编码,形如HEAD20060512000001;(头+日期+6位递增整数)后面为六位,每新的一年编号重新归0
- mysql 生成完整的存储过程定义语句
- 转:生成sql server2000对象创建脚本的存储过程
- 生成表中数据的sql语法的存储过程
- 将表里的数据批量生成INSERT语句的存储过程 增强版
- T-SQL 生成的公历年历 (写在了存储过程中了)
- 自动生成INSERT语句的SQL存储过程
- 也谈代码生成-----(存储过程生成工具基本原理)