MySql与SqlServer之存储过程区别1

mysql与SqlServer存储过程区别:

1、declare语句

mysql
1)DECLARE仅被用在BEGIN ... END复合语句里,并且必须在复合语句的开头,在任何其它语句之前。
2)定义变量不需要在变量名前加‘@’符合
sqlServer
1)DECLARE可以定义在BEGIN ... END复合语句里,也可以定义在BEGIN语句之前
2)定义变量必须在变量名前加‘@’符号
2、IF语句
mysql
1)语法格式:
IF 条件表达式  THEN  
语句;
ELSE
语句;
END IF;
SqlServer
1)语法格式:
IF 条件表达式
BEGIN
语句
END
ELSE
 BEGIN
语句
 END
3、使用select语句给变量赋值
mysql
 Select语句查询列中的值,通过使用INTO关键字将值赋给存储过程定义的变量,如:
select SeqID into NewSeqValue from seqt_0101001;
SqlServer
直接通过Select语句查询列中的值,使用“=”将值赋给存储过程中定义的变量,如:select @NewSeqValue=SeqID from SeqT_0101001
4、获取插入表最一个标识值
  Mysql
mysql使用last_insert_id()函数向表中插入最后一个标识值
SqlServer
SqlServer中使用scope_identity()函数向表中插入最后一个标识值
5、存储过程中创建表
mysql
  在存储过程创建表需要三个步骤完成:1.编写出创建表的sql语句并以字符串的形式赋给变量。
2.使用PREPARE stmt_name from preparable_stmt预定义一个sql语句,并将它赋给stmt_name.
3.使用EXECUTE stmt_name执行预定义的sql语句。
        SqlServer
直接在存储过程使用create table语句创建


6、日期转换字符串
MySql
使用date_format(date,format)函数转换,date是日期,now()就是当前日期;format指定要将日期转换成什么样的格式。
format格式:
%Y 年, 数字, 4 位 
%y 年, 数字, 2 位 
%d 月份中的天数, 数字(00……31)
%e 月份中的天数, 数字(0……31) 
%m 月, 数字(01……12) 
%c 月, 数字(1……12)
%H 小时(00……23) 
%k 小时(0……23) 
例:date_format(now(),'%y%c'):将日期转换成“YYm”
SqlServer

使用Convert(type,date,format)函数转换,type是要转换成的类型,在这就是varchar/char。date是日期,就是Getdate()当前日期。format是要转换成的字符串格式,可以参数SqlServer官网,http://msdn.microsoft.com/zh-cn/library/ms187928.aspx。例:Convert(char(6),Getdate(),12):这是将当前日期转换成"YYmmDD"格式的字符串。

示例代码:

Mysql示例:

-- 创建表SeqT_0101001
create table seqt_0101001(

      -- ID列为自增列
      SeqID int auto_increment,

      -- Sequence值
      SeqVal varchar(1),
      primary key (SeqID)
)

delimiter // 
create procedure P_GetNewSeqVal_SeqT_0101001 ( out NewSeqVal varchar(14) )
begin
      -- 声明新Sequence值变量
      declare NewSeqValue int default 0;
      declare sqlstr varchar(150);

      -- 设置插入、删除操作后的条数显示取消
      
	  
      -- 插入新值到SeqT_0101001表
      insert into  seqt_0101001 (SeqVal) values('a');  
	  select SeqID into NewSeqValue from seqt_0101001;
	  if(NewSeqValue % 9 = 0) then
		DROP TABLE seqt_0101001;
		set sqlstr='create table seqt_0101001(

      -- ID列为自增列
      SeqID int auto_increment,

      -- Sequence值
      SeqVal varchar(1),
      primary key (SeqID)
)';
		PREPARE create_stmt from @sqlstr;  
		EXECUTE create_stmt;  
	  end if;
      -- 设置新Sequence值为插入到SeqT_0101001表的标识列内的最后一个标识值  
      set NewSeqValue = last_insert_id();   
		
      -- 删除SeqT_0101001表(不显示被锁行)
      delete from seqt_0101001 ;

	set NewSeqVal=CONCAT(date_format(now(),'%y%m'),right(CONCAT('00000',CONCAT(NewSeqValue,'')),5));
end//

SQLServer示例:

create table SeqT_0101001(

      -- ID列为自增列
      SeqID int identity(1,1) primary key,

      -- Sequence值
      SeqVal varchar(1)
)

-- 创建从SeqT_0101001表获取最新Sequence值的存储过程
create procedure P_GetNewSeqVal_SeqT_01010012
@NewSeqVal varchar(14) output
as
begin
      -- 声明新Sequence值变量
      declare @NewSeqValue int

      -- 设置插入、删除操作后的条数显示取消
      set NOCOUNT ON
	  
      -- 插入新值到SeqT_0101001表
      insert into SeqT_0101001 (SeqVal) values ('a')   
	  select @NewSeqValue=SeqID from SeqT_0101001
	  if(@NewSeqValue % 9 = 0)
	  begin
		drop table SeqT_0101001
		create table SeqT_0101001(

			-- ID列为自增列
			SeqID int identity(1,1) primary key,

			-- Sequence值
		 SeqVal varchar(1)
		)
	  end
	  --print @NewSeqValue
      -- 设置新Sequence值为插入到SeqT_0101001表的标识列内的最后一个标识值  
      set @NewSeqValue = scope_identity()   
		
      -- 删除SeqT_0101001表(不显示被锁行)
      delete from SeqT_0101001 WITH (READPAST)

	set @NewSeqVal=Convert(char(6),Getdate(),12) + right('00000'+CAST(@NewSeqValue AS varchar(5)),5)
	--select @NewSeqVal as mySeq
-- 返回新Sequence值
--return @NewSeqVal

end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值