mysql存储过程与sql server存储过程自动生成编号:20150101007 当天逐一增加 方法比较

今天第一次写mysql的存储过程,感觉跟sql server的区别还是蛮大的,包括参数的声明,及其本身自带一些函数。

因为本人 是个菜鸟,所以就今天的例子中的不同自己稍微写写,加深自己的印象。

1、输入输出参数声明的不同:mysql 需要写在括号内,sql server 没有括号,并且参数名需要添加@;

2、declare声明变量,mysql每一个变量都需要添加declare,名字尽量不要跟列名相同,并且每一句都要以分号结束;sql server只需要一个declare,参数名之间逗号隔开,注意,参数名要加@。

3、给变量赋值:

    mysql有两种方式:set  变量名=值  或者  select 列明 into 变量名

    sql server可以使用set赋值,但是通过select 可以直接select 参数名= 列明 from 表获取值。

 4、函数

 两个不同的数据库函数差距还是很大的,

本例中用的是 求长度 mysql 为LENGTH(),sql server 可以使用len();

还是就是字符串拼接,mysql 字符串拼接需要使用函数CONCAT(),而sql server 可以用+进行字符串拼接,例如:2015+''+01;

下面是sql代码:

paper 表:

CREATE table paper (
ym varchar(15),
paperno int
)

//mysql 生成编号存储过程

DELIMITER $$


DROP PROCEDURE IF EXISTS `getPaper`

CREATE  getPaper (OUT paper VARCHAR(20))
BEGIN
DECLARE ymd VARCHAR(20);
DECLARE nowDate VARCHAR(20);
DECLARE paperno1 VARCHAR(20);
SET nowDate = DATE_FORMAT(NOW(),'%Y%m%d');
SELECT ym INTO ymd FROM paper;
IF ymd = nowDate THEN
SELECT paperno INTO paperno1 FROM paper;
UPDATE paper SET paperno=paperno1+1;
ELSE 
UPDATE  paper SET ym = nowDate,paperno = 1 ;
END IF ;
SELECT paperno INTO paperno1 FROM paper ;
IF LENGTH(paperno1) = 1 THEN SET paperno1 = CONCAT('00',paperno1);  END IF;
IF LENGTH(paperno1) = 2 THEN SET paperno1 = CONCAT('0',paperno1); END IF;
SET paper=CONCAT(nowDate,paperno1)  ;
    END$$

DELIMITER ;


//sqlserver 存储过程

CREATE   Proc   [dbo].[getPaper]      
  @paper   varchar(20)  output     --输出
  AS   
  Declare  @date datetime,
  @month varchar(2),
  @day varchar(2),
  @now varchar(8),
  @ym varchar(8),
           @paperno varchar(10)
  select @date = getdate() --得到当前日期
  select @month = convert(varchar(4),datepart(month,@date))
  if len(@month) = 1 set @month = '0' + @month --得到月份并修改为2位 
  select @day=convert(varchar(4),datepart(day,@date))
  if len(@day) = 1 set @day = '0' + @day
  select @now = convert(varchar(4),datepart(year,@date)) + @month + @day   --得到年份和月份的连接字符串
  
  select @ym=ym from paper --得到数据库中的年份和月份连接的字符串
  if (@now = @ym) 
     update paper set paperno=paperno+1        --如果当前年月和数据库中相同,就让流水号加1
  else 
     update  paper set ym = @now,paperno = 1    --否则,改变当前年月值,改变流水号为1
  
  select @paperno=paperno from paper
  if len(@paperno) = 1 set @paperno = '00' + @paperno  --流水号处理
  if len(@paperno) = 2 set @paperno = '0' + @paperno
  select @paper=(@now + '' + @paperno)   --设置输出
  





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值