USE [DBName]
GO
/****** Object:  StoredProcedure [dbo].[sp_GetNo]    Script Date: 10/24/2013 19:26:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  <Author, XiaoPan.Gong>
-- Create date: <Create Date, 2013-10-23>
-- Description: <Description, Upload Special Event Amout>
-- =============================================
 /* 第一
  CREATE TABLE [dbo].[T_Saler](
  [Id] [int] IDENTITY(1,1) NOT NULL,
  [SO_No] [nvarchar](50) NULL,
  [Name] [nvarchar](50) NULL,
  [Sale_Num] [int] NULL,
  [Remark] [nvarchar](max) NULL
 )
 --执行
 Declare @Get_No nvarchar(50)
 exec [dbo].[sp_GetNo] 'T_Saler','SO_No',10,8,'SN',@Get_No output
 print @Get_No
 
 SONO2013102400000001
 */
ALTER PROCEDURE [dbo].[sp_GetNo]
(
 @table_name nvarchar(50),--表名
 @field nvarchar(50),--字段名
 @left int,--左边截取的长度
 @right int,--右边截取的长度
 @split nvarchar(10),--编号其实字母或字符串
 @return_no nvarchar(50) output --返回的编号
)
AS
BEGIN
 Declare @sql nvarchar(MAX)
 Declare @rightnum int
 Declare @splitstr nvarchar(50)
 Declare @rightstr nvarchar(10)
 Declare @rightint int
 Declare @tbno nvarchar(50)
 
 Set @rightint=@right
 Set @rightstr=''
 
 while @rightint>0
 begin
 
  Set @rightstr=@rightstr+'0'
 
  Set @rightint=@rightint-1
 
 end
 
 Set @splitstr=@split+CONVERT(nvarchar,GETDATE(),112)
 
 
 Set @sql='select @rightnum=MAX(Convert(int,right(Convert(nvarchar,isnull('+@field+',0)),'+Convert(nvarchar,@right)+'))) from '
     +@table_name+' where left('+@field+','+Convert(nvarchar,@left)+')='+''''+@splitstr+''''
 
 EXEC SP_EXECUTESQL @sql, N'@rightnum int OUTPUT', @rightnum OUTPUT
 
 if @rightnum is null
 begin
  Set @rightnum=0
 end
 
 Declare @rightlen int
 Declare @rightlenght int
 
 Set @rightlen=LEN(Convert(nvarchar,@rightnum))
 Set @rightnum=@rightnum+1
 Set @rightlenght=LEN(Convert(nvarchar,@rightnum))
 
 if @rightlen=@rightlenght
  begin
   Set @tbno=RIGHT(@rightstr,@right-@rightlen)+Convert(nvarchar,@rightnum)
  
  end
 else
  begin
   Set @tbno=RIGHT(@rightstr,@right-@rightlenght)+Convert(nvarchar,@rightnum)
  end
 
 Set @return_no=@splitstr+ISNULL(@tbno,LEFT(@rightstr,@right-1)+'1')
 
 select @return_no AS Return_No
 
END

SET ANSI_NULLS OFF

Sql产生自动增长的编号的更多相关文章

  1. Sql 重置自动增长列

    Sql 重置自动增长列: dbcc checkident(表名, reseed, 0) 使用的情况,一般出现在主外键关联表,导致无法 truncate 只能delete的情况. 此时我们可能会需要重置 ...

  2. SQL Server 自动增长过大

    一.背景 我们遇到的问题如下图所示:自动增长无端端就按照这样的比例进行增长: (Figure1:问题所在) 尝试使用SSMS修改自动增长值,就会出现下面的错误: (Figure2:错误信息) 遇到上面 ...

  3. sql添加自动增长列

    alter table a add num int identity

  4. 《SQL Server企业级平台管理实践》读书笔记——SQL Server如何设置自动增长和自动收缩项

    SQL Server允许用户设置数据库初始值和最大值,可以通过自动增长或者自动收缩进行配置.通过这些配置,我们可以防止数据库空间问题而导致的应用程序修改失败或者SQL Server磁盘空间耗尽的事情发 ...

  5. Sql Server 主键由字母数字组成并按照数字自动增长

    在SQL SERVER 中如果我们想要使主键按照一定规则自动增长我们可以这样做: 这里我们新建一张研究表,里面有研究ID,研究人员姓名和研究医院. 我们使SicentificId 设为主键 并且从1开 ...

  6. [转载]C#中使用ADO.NET连接SQL Server数据库,自动增长字段用作主键,处理事务时的基本方法

    问题描述: 假设在数据库中存在以下两张数据表: User表,存放用户的基本信息,基本结构如下所示:   类型 说明 ID_User int 自动增长字段,用作该表的主键 UserName varcha ...

  7. 使用sql语句创建修改SQL Server标识列(即自动增长列)

    一.标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点:1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统 ...

  8. SQL Server 2012 自动增长列,值跳跃问题

    介绍 从 SQL Server 2012 版本开始, 当SQL Server 实例重启之后,表格的自动增长列的值会发生跳跃,而具体的跳跃值的大小是根据增长列的数据类型而定的.如果数据类型是 整型(in ...

  9. SQL获取刚插入的记录的自动增长列ID的值

    假设表结构如下: CREATE TABLE TestTable ( id int identity, CreatedDate datetime ) SQL2005获得新增行的自动增长列的语句如下: i ...

随机推荐

  1. CSS3实现的player播放按钮

    完成的效果如下 查看效果并下载 Step 1:先了解border的原理: Step 2:HTML代码结构 <section class="playContainer"> ...

  2. Android4.0 -- UI控件之 Menu 菜单的的使用(三)

    上一讲 [Android 开发]:UI控件之 Menu 菜单的的使用(二) 我们讲解了创建上下文菜单的第一种使用方式:Creating a floating context menu [创建悬浮的上下 ...

  3. Unity给力插件之LittleLocalization

    从网上随便下载了一个多语言的插件,原理很简单,自己就可以写一个.不过本身插件做的算比较全面,拿来就能用,所以精简了一下,然后重新打了个包. 为了快速使用插件,在此把步骤列出来. 1.创建空物体,添加L ...

  4. Tyvj P3119 核电站问题 动态规划

    题目:http://tyvj.cn/p/3119 P3119 核电站问题 时间: 1000ms / 空间: 65536KiB / Java类名: Main 描述 一个核电站有N个放核物质的坑,坑排列在 ...

  5. 安卓开发无法识别手机原因之一:手机SDK比工程要求的最小SDK低

      创建工程时,设置限制的最小SDK:   如果你手机的内核版本比你工程的设置的最小SDK低,则不显示   来自为知笔记(Wiz)

  6. 1 weekend110的复习 + hadoop中的序列化机制 + 流量求和mr程序开发

    以上是,weekend110的yarn的job提交流程源码分析的复习总结 下面呢,来讲weekend110的hadoop中的序列化机制 1363157985066      13726230503  ...

  7. SOA技术的进化史

    SOA 是一种程序设计思想,其实早在远古时代(计算机史)它就已经出现了.无非就是把系统分解,将数据和业务逻辑部分尽量独立出来,然后以服务形式提供给另外的系统共用. 那时也有一些可以实现 SOA 的工具 ...

  8. express4.x 路由中间件

    路由中间件必须通过app挂载到对应的路由上,如: var express = require('express'); var router = express.Router(); var app = ...

  9. 记录:Ubuntu下配置Eclipse

    >>下载Eclipse. 下载链接:http://www.eclipse.org/downloads/ 我选择了64bit的版本 >>安装Eclipse. 解压文件: tar ...

  10. spring集成guava的event bus

    Guava的event bus guava, https://github.com/google/guava 是一个非常有名的Java类库,提供了很多在日常开发中常用的集合.函数接口等.此外,guav ...