`
eric_hwp
  • 浏览: 125808 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SQLServer存储过程

 
阅读更多
ALTER PROCEDURE [dbo].[h5_newyear_app_draw]
(@action varchar(100)
,@game_id int=2
,@lot_type varchar(12)
,@weixin_id varchar(32)
,@seq varchar(32)=''
,@source varchar(50)=''
)
AS
BEGIN
  SET NOCOUNT ON; 
	
  DECLARE @success varchar(32);
	DECLARE @code nvarchar(32);
	DECLARE @msg nvarchar(128);
  DECLARE @rnd int;
  DECLARE @lot_id int;
  DECLARE @lot_code nvarchar(32);

	--默认错误信息
	SET @code='9997'
	SET @msg='CODE_PARAMETER_INVALID'
	SET @success='false'

  IF (@action='api.h5.game.draw')
		GOTO action_h5_game_draw;
	ELSE
		GOTO action_error

action_h5_game_draw:
	PRINT 'action_reg:' + @action
	--检查player_code是否已经注册
  IF NOT EXISTS (SELECT 1 FROM h5_game_player WHERE player_code=@weixin_id) 
    --以前没有抽过奖的直接插入数据,play_id是对应签的类型1到8
		BEGIN
			INSERT INTO h5_game_player (game_id,player_code,play_num,played_num,created,seq,status,player_id)VALUES(@game_id,@weixin_id,2,1,getdate(),@seq,0,@lot_type);
      --防止序列重复
      IF NOT EXISTS (SELECT 1 FROM h5_game_play_log WHERE seq=@seq)
         INSERT INTO h5_game_play_log (game_id,player_code,seq,created,from_code) VALUES(@game_id,@weixin_id,@seq,GETDATE(),@source);
      --去抽奖 
      GOTO action_draw;
		END
  ELSE
    BEGIN
      IF (SELECT count(0) FROM h5_game_player WHERE player_code=@weixin_id AND points=1)>0
          BEGIN 
              SET @code = '8889';
              SET @msg = '您已经中过奖了,不能继续参与抽奖';
              GOTO action_msg_end;
          END
      IF (SELECT count(0) FROM h5_game_play_log WHERE player_code=@weixin_id AND game_id=@game_id)>=2
          BEGIN 
              SET @code = '9000';
              SET @msg = '您已经抽取两次了';
              GOTO action_msg_end;
          END
      IF EXISTS (SELECT 1 FROM h5_game_play_log WHERE player_code=@weixin_id AND game_id=@game_id AND from_code=@source)
          BEGIN 
              SET @code = '9001';
              IF (@source='pulicNo')
                 SET @msg = '已经在公众号中抽过一次奖,请到非公众号里进行抽奖';
              ELSE
								 SET @msg = '已经在非公众号中抽过一次奖,请到公众号里进行抽奖';									 
              GOTO action_msg_end;
          END
      --插入抽奖记录,同时更新抽奖总数和能否抽奖的状态
      INSERT INTO h5_game_play_log (game_id,player_code,seq,created,from_code) VALUES(@game_id,@weixin_id,@seq,GETDATE(),@source);
      UPDATE  h5_game_player SET status=1,played_num=2 WHERE player_code = @weixin_id;
      --去抽奖 
      GOTO action_draw;
    END
	--返回信息
	goto action_msg_end;

	--抽奖
	action_draw:
    BEGIN
				SELECT @rnd=cast( floor(rand()*9999) as int);  
				IF(@rnd<500)
					 BEGIN
							 --SELECT @lot_id = (SELECT TOP 1 id FROM h5_game_award_pool WHERE award_id=@lot_type AND action_id=0 AND game_id=@game_id AND start_date < GETDATE());
							 SELECT @lot_id = (SELECT TOP 1 p.id FROM h5_game_award_pool p LEFT JOIN h5_game_award_config f ON p.award_id = f.id WHERE f.award_code=@lot_type AND p.action_id=0 AND p.game_id=@game_id AND p.start_date < GETDATE());
							 IF(@lot_id>0)
									BEGIN
											UPDATE h5_game_award_pool SET action_id=1,player_code=@weixin_id,updated=GETDATE() WHERE id = @lot_id;
                      --points作为是否中奖的标识1:中奖,0:未中奖
                      UPDATE  h5_game_player SET points=1 WHERE player_code = @weixin_id;
											SELECT 'true' as success,0 AS code,'恭喜您中奖了' as msg,@weixin_id as weixin_id,exchange_code as lot_code,
                         shop_name as brand_name,award_title,comments AS award_name,award_price,award_uri FROM h5_game_award_pool p 
                         LEFT JOIN h5_game_award_config f ON  p.award_id = f.id WHERE p.id=@lot_id
											return
									END 								
					 END
				 ELSE
					 BEGIN
						 SELECT 'true' as success,0 AS code,'您没有中奖了' as msg,'' As lot_code,'' AS weixin_id
						 return
					 END
    END;
		
	--错误,无此方法
	action_error:
		--print @action
		print 'error'
		SELECT @success as success,@code AS code,@msg as msg,'' As lot_code,'' AS weixin_id
		RETURN
		
	--直接结束
	action_ok:
		print 'ok:' + @action + ' ' + @weixin_id
		RETURN

	--显示返回信息,并结束
	action_msg_end:
		SET @success='true'
		print 'ok:' + @action + ' ' + @weixin_id
		SELECT @success as success,@code AS code,@msg as msg,'' As lot_code,'' AS weixin_id
		RETURN



	SET NOCOUNT OFF;  
END

 

  SQLServer的存储过程调用跟mysql是有区别的:

      exec h5_newyear_app_draw '%s',%s,'%s','%s','%s','%s' 不能带括号

  mysql是:

      call prc_add_si_member_point(1,'%s','%s','%s'); 带括号

分享到:
评论

相关推荐

    SqlServer存储过程及调试指南

    SqlServer存储过程及调试指南的知识点如下: 1. 存储过程概念:存储过程是一组为完成特定功能的SQL语句集,这些语句经过编译后存储在数据库中,供用户通过指定存储过程名和参数(如有)来执行。存储过程被称作...

    SQLServer存储过程调用WebService

    ### SQL Server 存储过程中调用 WebService 的实现方法 #### 一、引言 在企业级应用开发中,Web Service 作为一种标准的接口技术,被广泛用于不同平台之间的服务交互。而在 SQL Server 数据库中直接调用 Web ...

    sqlserver存储过程解密工具

    这就是“sqlserver存储过程解密工具”所解决的问题。 SQL Server存储过程的加密通常是在开发或部署过程中,为了保护知识产权、防止未授权修改或者增加安全性而进行的。然而,在某些情况下,比如接手他人项目、排查...

    SQLServer存储过程中事务的使用方法

    本篇将详细介绍如何在SQL Server存储过程中使用事务。 首先,事务有四个基本特性,即ACID(原子性、一致性、隔离性和持久性): 1. 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会留下...

    SQLserver存储过程异常处理.txt

    SQLserver存储过程异常处理

    sqlServer存储过程

    详细描述SqlServer存储过程,从认识、创建到原理和写法

    sqlserver 存储过程With Encryption加密的解密

    ### SQL Server 存储过程 With Encryption 加密的解密方法 #### 背景与目的 在SQL Server中,为了保护存储过程中的敏感代码或逻辑,可以使用`WITH ENCRYPTION`选项对存储过程进行加密处理。这可以有效防止未经授权...

    执行Sqlserver存储过程返回DataSet

    ### 执行SQL Server 存储过程并返回DataSet 在软件开发过程中,经常需要与数据库进行交互,其中一种常见的场景就是通过调用存储过程来获取数据并处理这些数据。本篇文章将详细探讨如何在C#中执行SQL Server的存储...

    SQLServer存储过程转为oracle存储过程的工具

    可以将SQL Server存储过程转为oracle存储过程的工具

    SQL Server存储过程解密工具

    SQL Server存储过程是数据库管理系统中一个非常重要的组成部分,它允许程序员和DBA编写一组复杂的SQL语句,封装成一个可重用的模块。在某些情况下,为了保护代码不被未经授权的用户查看或修改,开发人员可能会选择对...

    Sql Server 存储过程的导出导入.doc

    在SQL Server中,存储过程是一种预编译的SQL语句集合,它允许开发人员封装一组复杂的操作,并在需要时重复调用。存储过程对于数据库管理、数据处理和性能优化具有重要意义。本文主要介绍如何在SQL Server中导出和...

    SQLSERVER 存储过程 语法

    本文将深入解析SQL Server存储过程的创建、参数传递、事务管理、条件判断以及游标使用的语法细节。 #### 创建存储过程 存储过程的基本语法如下: ```sql CREATE PROCEDURE 存储过程名称 @参数1 数据类型, @参数...

    SQLServer存储过程在系统开发中的应用

    ### SQL Server 存储过程在系统开发中的应用 #### 概述 在现代数据库系统开发过程中,SQL Server 存储过程被广泛应用于提高系统性能、简化应用程序开发以及增强安全性等方面。存储过程是一种预编译的SQL脚本,它...

    SQLSERVER存储过程例子

    以下是针对"SQLSERVER存储过程例子"的详细解释。 1. **存储过程的概念**: 存储过程是一组为了完成特定功能的SQL语句,这些语句被组合在一起并保存在数据库中,用户可以通过调用存储过程的名字来执行这些语句。...

    java调用sqlserver存储过程.pdf

    "Java 调用 SQL Server 存储过程" Java 调用 SQL Server 存储过程是指在 Java 应用程序中调用 SQL Server 数据库中的存储过程,以实现数据的增删改查等操作。下面是关于 Java 调用 SQL Server 存储过程的知识点: ...

    SQL Server 存储过程与实例

    以下是关于SQL Server存储过程的详细说明: 1. **存储过程的概念** 存储过程Procedure是一系列SQL语句的集合,它们在数据库中以编译好的形式存储,当需要执行时,只需要调用存储过程的名称并传入相应的参数。存储...

    SqlServer存储过程解密工具(dbForge SQL Decryptor 3.1.24)

    亲测SqlServer存储过程解密工具(dbForge SQL Decryptor 3.1.24) 支持sql2000、2005、2008(R2)、2012、2014、2016、2017的存储过程的解密; 程序运行需要 .NET Framework 4.5.2 or higher installed

    学习SQL Server存储过程入门例子详解

    SQL Server 存储过程入门例子详解 SQL Server 存储过程是数据库管理员和开发人员的必备技能,本文将通过三个简单的例子来详细介绍 SQL Server 存储过程的基本知识。 例 1:简单的存储过程 在这个例子中,我们将...

    如何编写SQL Server存储过程的详尽学习资料

    以下是对"如何编写SQL Server存储过程的详尽学习资料"的详细解析。 首先,我们要了解存储过程的基本概念。存储过程是数据库中的一个对象,由一组T-SQL语句组成,用于完成特定的数据库操作。它们可以被多次调用,...

Global site tag (gtag.js) - Google Analytics