SQL Server自动生成日期加数字的序列号_MsSql

USE MASTER
GO
IF EXISTS(SELECT * FROM dbo.sysdatabases WHERE
name='my_test_database')
DROP DATABASE [my_test_database]
GO
CREATE DATABASE [my_test_database]
GO
USE [my_test_database]
GO
CREATE TABLE [my_table] ([my_id] VARCHAR(16))
GO
--存储过程开始

CREATE PROCEDURE get_new_id
@NEW_ID VARCHAR(16) OUTPUT
AS
BEGIN
DECLARE @DATE DATETIME
DECLARE @YYYY VARCHAR(4)
DECLARE @MM VARCHAR(2)
DECLARE @DD VARCHAR(2)
--保存取得的当前时间

SET @DATE = GETDATE()
SET @YYYY = DATEPART(yyyy, @DATE)
SET @MM = DATEPART(mm, @DATE)
SET @DD = DATEPART(dd, @DATE)
--位数不够的前面补0
SET @YYYY = REPLICATE('0', 4 - LEN(@YYYY)) + @YYYY
SET @MM = REPLICATE('0', 2 - LEN(@MM)) + @MM
SET @DD = REPLICATE('0', 2 - LEN(@DD)) + @DD
--取出表中当前日期的已有的最大ID
SET @NEW_ID = NULL
SELECT TOP 1 @NEW_ID = [my_id] FROM [my_table] WHERE [my_id] LIKE
@YYYY+@MM+@DD+'%' ORDER BY [my_id] DESC
--如果未取出来
IF @NEW_ID IS NULL
--说明还没有当前日期的编号,则直接从1开始编号
SET @NEW_ID = (@YYYY+@MM+@DD+'00000001')
--如果取出来了

ELSE
BEGIN
DECLARE @NUM VARCHAR(8)
--取出最大的编号加上1

SET @NUM = CONVERT(VARCHAR, (CONVERT(INT, RIGHT(@NEW_ID, 8)) + 1))
--因为经过类型转换,丢失了高位的0,需要补上
SET @NUM = REPLICATE('0', 8 - LEN(@NUM)) + @NUM
--最后返回日期加编号

SET @NEW_ID = @YYYY+@MM+@DD + @NUM
END
END
GO
--执行20次调用及插入数据测试

DECLARE @N INT
SET @N = 0
WHILE @N < 20
BEGIN
DECLARE @NEW_ID VARCHAR(16)
EXECUTE get_new_id @NEW_ID OUTPUT
INSERT INTO [my_table] ([my_id]) VALUES (@NEW_ID)
SET @N = @N + 1
END
SELECT * FROM [my_table]
GO
--输出结果

时间: 2016-08-07

SQL Server自动生成日期加数字的序列号_MsSql的相关文章

SQL Server自动生成日期加数字的序列号

USE MASTER GO IF EXISTS(SELECT * FROM dbo.sysdatabases WHERE name='my_test_database') DROP DATABASE [my_test_database] GO CREATE DATABASE [my_test_database] GO USE [my_test_database] GO CREATE TABLE [my_table] ([my_id] VARCHAR(16)) GO --存储过程开始 : CREA

sql server自动生成拼音首字母的函数_MsSql

建立一个查询,执行下面的语句生成函数fn_GetPy 复制代码 代码如下: --生成拼音首码 CREATE function fn_GetPy(@str nvarchar(4000)) returns nvarchar(4000) --WITH ENCRYPTION as begin declare @intLen int declare @strRet nvarchar(4000) declare @temp nvarchar(100) set @intLen = len(@str) set

sql server自动生成批量执行SQL脚本的批处理

  场景: DBA那边给我导出了所有的存储.函数等等对象的创建脚本,有上千个文件. 现在需要将这些对象创建脚本导入到另外一个库,如何解决呢? 手动一个个执行显然不太现实. 于是手动写了一个批处理,将所有的文件形成一个.SQL的脚本,最后以@生成的.SQL脚本方式导入到目标库中. OS环境:WINDOWS xp 脚本内容如下: @echo off if exist list.sql del list.sql /q :input cls set input=: set /p input= 请输入要进

SQL Server自动更新统计信息的基本算法_MsSql

自动更新统计信息的基本算法是: · 如果表格是在 tempdb 数据库表的基数是小于 6,自动更新到表的每个六个修改. · 如果表的基数是大于 6,但小于或等于 500,更新状态每 500 的修改. · 如果基数大于 500,表为更新统计信息时(500 + 20%的表)发生了更改. · 表变量为基数的更改不会触发自动更新统计信息. 注意:此严格意义上讲,SQL Server 计算基数为表中的行数. 注意:除了基数,该谓语的选择性也会影响 AutoStats 生成.这意味着该统计信息可能无法更新的

sql server自动生成拼音首字母的函数

建立一个查询,执行下面的语句生成函数fn_GetPy 复制代码 代码如下: --生成拼音首码 CREATE function fn_GetPy(@str nvarchar(4000)) returns nvarchar(4000) --WITH ENCRYPTION as begin declare @intLen int declare @strRet nvarchar(4000) declare @temp nvarchar(100) set @intLen = len(@str) set

急需-如何自动生成字母加日期再加数字的序列号

问题描述 如何自动生成字母加日期再加数字的序列号 我是菜鸟,现在在做公司的工单管理系统,每下一个工单就要向工单表中插入工单编号,编号形式为TN+当前年月日+6为从1开始自动增长的数字,其中TN是固定的 例如,插入的第一个数是:TN20130811000001 请大家帮帮忙,求源码 急需,谢谢!!! 解决方案 字符串连接可以实现这个需求 解决方案二: 字符串就是了~~~~系统时间你可以取到,自增长的你也可以自己设定的(最好是用一个SQL的方法) 这样你字符串自己组合下就好了... 解决方案三: p

如何使excel自动生成日期

   Excel自动生成日期我想在一列自动生成日期(不超过设定的某一天), 不要有规律的有什么办法么,先将这一列的单元格格式设置为"日期"格式,如果要将日期设定为2000-1-1到2100-1-1之间那么在这一列中输入以下公式: =INT(RAND()*(73051-36526)+36526) 要设置不同的时间段,只要将公式中的数值进行修改即可 想要的日期和数字的规律是什么啊, 从1900-1-1的那一天起为第1天,到2000-1-1的那一天就刚好是第36526天  

hibernate-Hibernate 自动生成日期值

问题描述 Hibernate 自动生成日期值 <class name="com.traitswu.zone.entity.User" table="user"> <id name="id" type="int" column="id"> <generator class="native"/> </id> <property name=

Sql Server中的日期与时间函数

Sql Server中的日期与时间函数: 1.  当前系统日期.时间     select getdate()  2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值:   例如:向日期加上2天    select dateadd(day,2,'2004-10-15')  --返回:2004-10-17 00:00:00.000 3. datediff 返回跨两个指定日期的日期和时间边界数:   select datediff(day,'2004-09-01'