SqlServer按时间自动生成生成单据编号

 

 SET @_tmpDateTime = GETDATE()      

                                                                                                                             EXEC dbo.Dtw_Common_GenerateProofCode @ProofType = 'SO',@WhsCode=@WhsCode, @ProofDate = @_tmpDateTime,
@RtnCode = @_tmpProofCode OUTPUT --生成的最终的CODE

 

USE [SZVB]
GO
/****** Object: StoredProcedure [dbo].[Dtw_Common_GenerateProofCode] Script Date: 2015/4/8 11:52:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Dtw_Common_GenerateProofCode]

(

@TableName nvarchar( 128 )='', --表名

@FiledName nvarchar(128)='',

@ProofType nvarchar( 32 ) , --单据简称 两位

@ProofDate datetime='',

@RtnCode nvarchar( 64 ) = null output, --生成的最终的CODE

@WhsCode varchar(10)=''

)

AS

 

--使用新方式

--if(@WhsCode is null Or @WhsCode='')

--select @WhsCode=Code from W_inf_Warehouse where id=1

if(@WhsCode='')set @WhsCode =DB_NAME()--只有标准版使用仓库编码
else
set @WhsCode=LEFT(@WhsCode,4)

declare @Name varchar(50)

set @Name=@ProofType+@WhsCode

exec [up_GetMessageId] @Name=@Name,@EDICode='',@RMessageId=@RtnCode output,@IsLongYear=1,@ItemCount=4

return

 

 

 

USE [SZVB]
GO
/****** Object: StoredProcedure [dbo].[up_GetMessageId] Script Date: 2015/4/8 13:49:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
增加一张生成序列号表:w_SN_EDI 1)EDICode nvarchar(50) 2)SerialNo int

declare @s nvarchar(100)

exec dbo.up_GetMessageId 'DTWEHS','IR',@s output

print @s
*/

ALTER Procedure [dbo].[up_GetMessageId]
(
@Name nvarchar(100) ='DTW01',
@EDICode nvarchar(8),
@RMessageId nvarchar(100) output,
@IsLongYear int=0,
@ItemCount int=5 , --流水码长度
@IsClear bit=1, --是否清零
@SplitChar varchar(1)='',
@CodeQty int=0 --需要条码的数量,注意不是份数,份数是每个条码相同,而数量是指连续的号码
)
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION --开始一个事务
declare @IsReturnTable bit
set @IsReturnTable=0
if(@CodeQty>0)
begin
--为了兼容以前系统,对于没有指定@CodeQty的不需要返回表,仅适使用@RMessageId返回一个号码
set @IsReturnTable=1
end

else
begin
set @CodeQty =1
end
declare @SerialNo int,@Date nvarchar(8)
if(@IsLongYear=1)
set @Date=convert(nvarchar(6),getdate(),12)
else if(@IsLongYear=2) --短年+月份
set @Date=convert(nvarchar(4),getdate(),12)
else
set @Date=convert(nvarchar(8),getdate(),112)
set @SerialNo = 0

if not exists(select 1 from w_SN_EDI where [Name]=@Name and EdiType=@EDICode)
begin
Insert Into w_SN_EDI([Name],EdiType,[Date],SerialNo)
select @Name,@EDICode,@Date,@CodeQty
if(@@Error<>0) goto err
end
else
begin
if @IsClear=1
begin
if not exists(select 1 from w_SN_EDI where [Name]=@Name and EdiType=@EDICode and [Date]=@Date)
begin
update w_SN_EDI set serialno =@CodeQty,[Date]=@Date
where [Name]=@Name and EdiType=@EDICode
if(@@Error<>0) goto err
end
else
begin
select @SerialNo = serialno from w_SN_EDI
where [Name]=@Name and EdiType=@EDICode and [Date]=@Date

update w_SN_EDI set serialno = serialno + @CodeQty
where [Name]=@Name and EdiType=@EDICode and [Date]=@Date
if(@@Error<>0) goto err
end
end
else
begin--不清零
select @SerialNo = serialno from w_SN_EDI
where [Name]=@Name and EdiType=@EDICode
if @SerialNo=99999 set @SerialNo=0
update w_SN_EDI set serialno = @SerialNo + @CodeQty
where [Name]=@Name and EdiType=@EDICode
if(@@Error<>0) goto err
end
end
declare @end int
set @end=@SerialNo+@CodeQty
SET @RMessageId = ''
declare @Tab table(Id int identity(1,1),No varchar(50))
set @SerialNo=@SerialNo+1
while(@SerialNo<=@end)
begin
set @RMessageId=@Name+@SplitChar+@EDICode+ @SplitChar+@Date+(REPLICATE('0',@ItemCount-len(@SerialNo))+cast((@SerialNo) as nvarchar(10)))
Insert Into @Tab values(@RMessageId)
set @SerialNo=@SerialNo+1
end
if(@IsReturnTable=1)
Select Id,No From @Tab

COMMIT TRANSACTION --提交事务
Return

err:
begin

raiserror('生成MessageId失败:%s%s',16,1,@Name,@EDICode)
ROLLBACK TRANSACTION

end

 

转载于:https://www.cnblogs.com/just09161018/p/4402254.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hive创建分区表 指定分隔符_HIVE 对于分区表的操作

CREATE EXTERNALTABLE IF NOT EXISTS data_zh(ROWKEY STRING,STATION INT,YEAR INT,MONTH INT,DAY INT,HOUR INT,MINUTE INT,)PARTITIONED BY (AGE INT)指定分区(此列并没真正存储列&#xff0c;也就是不存于你的数据中。但是如果你的数据从Oracle按年份导出&#xff0c;按照年…

Web Service 学习

1. Web services 平台的元素&#xff1a; SOAP (简易对象访问协议) UDDI (通用描述、发现及整合) WSDL (Web services 描述语言)1.1 什么是 SOAP&#xff1f; 基本的 Web services 平台是 XML HTTP。 SOAP 指简易对象访问协议 SOAP 是一种通信协议 SOAP 用于应用程序之间的通信…

java高级mysql面试题_Java高级面试题

一.基础知识&#xff1a;1)集合类&#xff1a;List和Set比较&#xff0c;各自的子类比较(ArrayList&#xff0c;Vector&#xff0c;LinkedList&#xff1b;HashSet&#xff0c;TreeSet)&#xff1b;2)HashMap的底层实现&#xff0c;之后会问ConcurrentHashMap的底层实现&#x…

转:Oracle 中union的用法

UNION 指令的目的是将两个 SQL 语句的结果合并起来,可以查看你要的查询结果. 例如: SELECT Date FROM Store_Information UNION SELECT Date FROM Internet_Sales 注意:union用法中,两个select语句的字段类型匹配,而且字段个数要相同,如上面的例子,在实际的软件开发过程,会遇到…

mysql skip_counter_mysql的三个故障解决小结

mysql使用过程中经常会遇到的三个故障&#xff0c;在此小结一下。1、MySQl服务无法启动我们在使用mysql的过程中&#xff0c;常会遇到MySQl服务无法启动&#xff0c;具体报错信息&#xff1a;Starting MySQL ERROR.The server quit without updating PID file (/[FAILED]l/mysq…

Httpd 使用ip可以访问,localhost和127.0.0.1不能访问

解决方法&#xff1a;打开/etc/httpd/conf目录下的httpd.conf文件&#xff0c; 加入 Listen 127.0.0.1:81 加入后&#xff1a; Listen xxx.xxx.xxx.xxx:81 Listen 127.0.0.1:81 其中xxx.xxx.xxx.xxx是我的ip 这样通过ip、localhost、127.0.0.1都可以访问了 转载于:https://www.…

如何将每一条记录放入到对应的范围中

编程序的时候遇到一个问题&#xff1a; 画热图 &#xff1a;计算热力值--->画网格&#xff0c;将在一定范围内定位出的mac累积计数--->编写出了定位程序&#xff0c;但是如何将每个具体的坐标值放入对应的范围&#xff08;网格&#xff09;--->因为具体坐标和网格选取…

mysql主从进行扩展_Mysql主从知识扩展部分1

一、使用mysql-proxy 快速实现mysql 集群 读写分离1、有两种方法&#xff1a;a)程序代码内部实现&#xff0c;对select操作分发到从库&#xff0c;其他到主库&#xff0c;再生产环境中应用比较广泛&#xff0c;比较知名的有DISCUZX2&#xff0c;优点性能好&#xff0c;成本低&a…

Python之异常追踪模块:traceback

正常时输出追踪信息&#xff1a; import traceback def stack():print The python stack:traceback.print_stack() from twisted.internet import reactor reactor.callWhenRunning(stack) reactor.run()#摘录来自: likebeta. “Twisted与异步编程入门”。 iBooks. 异常时输出…

mysql事务所_mysql事务

1.事务的ACID属性事务(Database Transaction) &#xff0c;是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成&#xff0c;否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元&…

[草稿]挂载新硬盘

查看新硬盘&创建分区 xxxxxx:/dev$ sudo fdisk -l [sudo] password for xxx: Disk /dev/sda: 85.9 GB, 85899345920 bytes 255 heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors Units sectors of 1 * 512 512 bytes Sector size (logical/physical):…

php mysql 迁移_将phpstudy中的mysql迁移至Linux教程

项目目的将原来windows环境中使用phpstudy搭建的mysql 5.5.53 中的数据迁移至新主机Linux环境中环境情况新主机系统平台&#xff1a;CentOS release 7.4 (Final) 内核 3.10.0-693.el7.x86_64mysql环境&#xff1a;mysql> statusServer version: 5.6.39-log…

Swift 操作符

这里只记录一些swift特殊的运算符 1.swift里面 仅仅进行赋值操作&#xff0c;不再向右边返回左值 2.模运算的操作数可以是小数了 3.Nil Coalescing Operator nil coalescing operator用来判断一个可选值是否有值&#xff0c;如果没有的话就赋予其一个缺省值 注意这里面“&…

python json.dumps慢_python json.dumps中文乱码问题解决

json.dumps(var,ensure_asciiFalse)并不能解决中文乱码的问题json.dumps在不同版本的Python下会有不同的表现&#xff0c; 注意下面提到的中文乱码问题在Python3版本中不存在。注:下面的代码再python 2.7版本下测试通过# -*- coding: utf-8 -*-odata {a : 你好}print odata结果…

UIView常见方法总结

一、随机生成数 1. arc4random() 会生成任意正整数和0 2. arc4random_uniform(100) 会生成0~99的整数 &#xff08;包括0和99&#xff09; 二、UIView常见方法 1. addSubview:(UIView *)child 添加子控件用&#xff08;最新添加的子控件&#xff0c;会显示在最上面&#xff09;…

netty java_Netty框架学习及第一个Netty应用

编辑推荐:本文来自于csdn,文章主要介绍了Netty的基础&#xff0c;有什么特点&#xff0c;其构成部分是什么&#xff0c;以及相关的应用。1.什么是Netty&#xff1f;Netty是一个利用Java的高级网络的能力&#xff0c;隐藏其背后的复杂性而提供一个易于使用的API的客户端/服务器框…

兩端對齊

1.利用flex parentElement{display: flex;justify-content: space-between;} 左边对齐右边对齐<div class"justifySpan"><span>齐</span><span>齐</span></div> .justify {display: -webkit-box;display: -ms-flexbox;display: …

java拆装_Java自动拆装包

Java自动拆装包的例子这段代码在Java 1.5以前是不合法的Long v 0&#xff1b;v 1&#xff1b;需要写成这样&#xff1a;Long v 0&#xff1b;v new Long(1);在Java 1.5 以后&#xff0c;编译器帮我们做了上面的工作。这就是Java的自动拆装包&#xff0c;方便了很多&#xf…

Android学习(二十)Notification通知栏

一、通知栏的内容 1、图标 2、标题 3、内容 4、时间 5、点击后的相应 二、如何实现通知栏 1、获取NotificationManager。 2、显示通知栏&#xff1a;notify(id,notification); 3、取消通知栏&#xff1a;cancle(id); 4、构造Notification并设置显示内容; 5、通知栏通知可以设置…

java访问mongodb_Java中获取MongoDB连接的方法详解

首先是所需jar包&#xff0c;Maven中的配置如下&#xff1a;org.mongodbmongodb-driver3.4.1org.mongodbbson3.4.1org.springframework.dataspring-data-mongodb1.7.0.RELEASEorg.mongodbmongo-java-driver3.9.1获取连接的代码如下(本中用的是模板类)&#xff1a;List addrs n…