MSSQL 生成有意义的PROC

--MSSQL  用PROC 生成有意义的单号:如WP200011101

GO
/****** 对象:  Table [dbo].[tbl_SequenceNum]    脚本日期: 01/20/2011 10:13:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tbl_SequenceNum](
 [ID] [uniqueidentifier] ROWGUIDCOL  NOT NULL CONSTRAINT [DF_CM_SequenceNumber_ID]  DEFAULT (newid()),
 [SequenceNumTypeCode] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
 [CurrNumber] [int] NOT NULL,
 CONSTRAINT [PK_CM_SequenceNumber] PRIMARY KEY CLUSTERED 
(
 [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'主键' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_SequenceNum', @level2type=N'COLUMN',@level2name=N'ID'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'生成序列号的类型(CHG,SRV,CHW)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_SequenceNum', @level2type=N'COLUMN',@level2name=N'SequenceNumTypeCode'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'当前流水号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_SequenceNum', @level2type=N'COLUMN',@level2name=N'CurrNumber'
GO

GO
/****** 对象:  Table [dbo].[tbl_SequenceNumType]    脚本日期: 01/20/2011 10:15:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tbl_SequenceNumType](
 [SequenceNumTypeCode] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
 [SequenceNumTypeName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
 [IncreaseLength] [int] NOT NULL,
 [Prefix] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
 [initNum] [int] NOT NULL,
 [Length] [int] NULL,
 CONSTRAINT [PK_tbl_SequenceNumType] PRIMARY KEY CLUSTERED 
(
 [SequenceNumTypeCode] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'生成序列号的类型(CHG,SRV,CHW)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_SequenceNumType', @level2type=N'COLUMN',@level2name=N'SequenceNumTypeCode'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'生成流水号类型的名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_SequenceNumType', @level2type=N'COLUMN',@level2name=N'SequenceNumTypeName'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流水号自增量' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_SequenceNumType', @level2type=N'COLUMN',@level2name=N'IncreaseLength'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流水号前缀' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_SequenceNumType', @level2type=N'COLUMN',@level2name=N'Prefix'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'流水号初始值' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_SequenceNumType', @level2type=N'COLUMN',@level2name=N'initNum'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'生成ID除字母前缀外的总长度' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'tbl_SequenceNumType', @level2type=N'COLUMN',@level2name=N'Length'

GO

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER FUNCTION [dbo].[ufn_getSpecialTypeID]
(@SequenceNumTypeCode nvarchar(20))
RETURNS nvarchar(20)
AS
BEGIN
 DECLARE @returnValue nvarchar(20)
 DECLARE @CurrNumber int
 DECLARE @IncreaseLength int
 DECLARE @initNum int
 DECLARE @Prefix varchar(10)
 DECLARE @Length int

SET @CurrNumber = 0

SELECT @IncreaseLength = IncreaseLength,
  @initNum = initNum,
  @Prefix = Prefix,
  @Length = Length
 FROM tbl_SequenceNumType
 WHERE SequenceNumTypeCode = @SequenceNumTypeCode

SELECT @CurrNumber = CurrNumber
 FROM tbl_SequenceNum
 WHERE SequenceNumTypeCode = @SequenceNumTypeCode

IF @CurrNumber = 0 
  SET @CurrNumber = @initNum

SET @CurrNumber = @CurrNumber + @IncreaseLength

SET @returnValue = '00000000' + CONVERT(nvarchar(10), @CurrNumber)
 SET @returnValue = RIGHT(@returnValue, @Length)
 SET @returnValue = @Prefix + CONVERT(nvarchar(20),@returnValue)

RETURN @returnValue

END

GO

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[usp_WO_UpdateCurrNumBySequenceNumTypeCode]
@SequenceNumTypeCode nvarchar(20)
AS
SET NOCOUNT ON

DECLARE @CurrNumber nvarchar(20)

DECLARE @Prefix varchar(10)
SELECT @Prefix = Prefix
FROM tbl_SequenceNumType
WHERE SequenceNumTypeCode = @SequenceNumTypeCode

SET @CurrNumber = dbo.ufn_getSpecialTypeCurrNum(@SequenceNumTypeCode)

IF EXISTS(SELECT 1 FROM tbl_SequenceNum WHERE SequenceNumTypeCode = @SequenceNumTypeCode)
BEGIN
 --UPDATE
 UPDATE tbl_SequenceNum
 SET CurrNumber = @CurrNumber
 WHERE SequenceNumTypeCode = @SequenceNumTypeCode
END
ELSE
BEGIN
 --INSERT
 INSERT INTO tbl_SequenceNum
 (
  ID,
  SequenceNumTypeCode,
  CurrNumber
 )
 VALUES
 (
  NEWID(),
  @SequenceNumTypeCode,
  @CurrNumber
 )
END

SET NOCOUNT OFF

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER FUNCTION [dbo].[ufn_IsID]
(@Param nvarchar(50), @Prefix nchar(3))
RETURNS bit
AS
/*
返回 1是数字  0不是数字
*/
BEGIN
 DECLARE @IsID bit
 SET @IsID = 0

IF LEN(@Param) = LEN(@Prefix) + 9
 BEGIN
  IF ISNUMERIC(RIGHT(@Param, LEN(@Param) - LEN(@Prefix))) = 1 AND LEFT(@Param, LEN(@Prefix)) = @Prefix
  BEGIN
   SET @IsID = 1
  END
 END
 ELSE
 BEGIN
  IF ISNUMERIC(@Param) = 1
  BEGIN
   SET @IsID = 1
  END  
 END

RETURN @IsID
END
GO

--具体事例
--生成文件编号
DECLARE @DocNo NVARCHAR(100) 
DECLARE @SequenceNumTypeCode_Req nchar(4)
SET @SequenceNumTypeCode_Req = 'DOC'
SET @DocNo = dbo.ufn_getSpecialTypeID(@SequenceNumTypeCode_Req)
EXEC usp_WO_UpdateCurrNumBySequenceNumTypeCode @SequenceNumTypeCode = @SequenceNumTypeCode_Req
GO

MSSQL 生成有意义的PROC的更多相关文章

  1. MSSQL 生成拼音码

    MSSQL 生成拼音码 /*============================================================================== 名称:fn_G ...

  2. .Net Core开源小工具mssql2mysql,从mssql生成mysql脚本

    Microsoft SQL Server to MySQL 这个工具用于从MSSQL生成MySQL脚本,生成的脚本包含表结构和数据 安装 这是一个.Net Core的具具,所以需要先安装.net co ...

  3. MSSQL生成整个数据库的SQL脚本的工具 scptxfr.exe

    scptxfr.exe的路径要正确declare @cMd varchar(1000)set @cmd = 'master.dbo.xp_cmdshell ' + '''c:\"Micros ...

  4. -----------MSSQL生成流水号-----------------------

    --下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号.--得到新编号的函数CREATE FUNCTION f_NextBH()RETURNS char(8)ASBEGIN RETURN( ...

  5. MSSQL 生成唯一自增数据的办法

    我的应用场景是多进程并发获取这个计数,且要保证唯一且自增,我用的办法是锁表 计数表Counter,就一行数据 下面是存储过程 create procedure [dbo].[GetCount] AS ...

  6. 如何将sqlserver表中的数据导出sql语句或生成insert into语句 [转]

    输入表名,生成插入语句 drop proc proc_insert //如果存在就删除 go create proc proc_insert (@tablename varchar(256)) as ...

  7. 使用linux perf工具生成java程序火焰图

    pre.cjk { font-family: "Nimbus Mono L", monospace } p { margin-bottom: 0.1in; line-height: ...

  8. Linux中/etc/fstab /etc/mtab /proc/mounts这三个文件的分析与比较 分区表位置

    本文主要讲解Linux中/etc/fstab /etc/mtab /proc/mounts这三个文件的作用以及不同之处. 转自http://haohaozhang.blog.51cto.com/917 ...

  9. Linux中 /proc/[pid] 目录各文件简析

    Linux 内核提供了一种通过 proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系 ...

随机推荐

  1. 图像的影像地图超链接,<map>标签浅谈

    在HTML中还可以把图片划分成多个热点区域,每一个热点域链接到不同网页的资源.这种效果的实质是把一幅图片划分为不同的热点区域,再让不同的区域进行超链接.这就是影像地图.要完成地图区域超链接要用到三种标 ...

  2. android开发步步为营之68:Facebook原生广告接入总结

    开发应用的目的是干嘛?一方面当然是提供优质服务给用户,还有一方面最重要的还是须要有盈利.不然谁还有动力花钱花时间去开发app? 我们的应用主攻海外市场,所以主要还是接入国外的广告提供商.本文就今天刚完 ...

  3. 阻塞机制下的recv小结

    recv是socket编程中最常用的函数之一,在阻塞状态的recv有时候会返回不同的值,而对于错误值也有相应的错误码,分别对应不同的状态,下面是我针对常见的几种网络状态的简单总结.      首先阻塞 ...

  4. 关于 keybd_event (vb篇)

    最近有个VB的项目,做到64位的win7上,传统的VB6.0的sendkeys()函数没法用,可能是由于微软的证书验证机制造成的,于是最常用的一句话指令没法用了“SendKeys "{Hom ...

  5. Spring.net--很棒的事务处理

    1--Case 比如t_Order订单表1,t_OrderDetail订单明细表2 下一张订单会往表1插入一条数据,表2会插入多行数据 使用Spring.net事务管理 例如 ---Order---订 ...

  6. Java中如何判断当前环境是大端字节顺序还是小端字节顺序

    Java非字节类型的基本类型,除了布尔型都是由组合在一起的几个字节组成的.这些数据类 型及其大小总结在表 2-1 中. 表:基本数据类型及其大小 数据类型 大小(以字节表示) Byte 1 Char ...

  7. Apache 2.x+jboss6.1反向代理session共享问题设置

    2016年8月4日,第一次开笔写博客园,今天在公司解决了一个问题. apache+jboss做负载均衡的问题一直困扰了很久.问题描述如下,使用apche做反向代理转发给3台jboss 的app,app ...

  8. hdu4976 贪心+dp

    A simple greedy problem. Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java ...

  9. SSM框架搭建java.lang.ClassNotFoundException: org.springframework.http.converter.json.MappingJacksonHttpMessageConverter

    在搭建 spring springMVC Mybatis 时候出错 将org.springframework.http.converter.json.MappingJacksonHttpMessage ...

  10. bootstrap--- 两种bootstrap multiselect组件大比拼

    http://www.cnblogs.com/landeanfen/p/5013452.html 1.第一种可以兼容IE,第二种不能兼容