`
tanglong8848
  • 浏览: 71888 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

简单创建存储过程范例

 
阅读更多
 
ALTER PROCEDURE  [dbo].[usp_syn_kmbs]
	 @batchid  int --输入参数 --如果声明OUTPUT为输出参数
AS
BEGIN
   declare @username varchar --声明变量
   declare @cellphone varchar
   declare @storecode	varchar
   declare @sid int
   declare cur cursor for --定义游标
	SELECT  [SID],USERNAME, CELLPHONE,STORECODE  FROM  KMBS_SOURCE  WHERE  BATHCID=@batchid  
	
	open cur--打开游标
	fetch next from cur into @sid,@username,@cellphone,@storecode  --把提取操作的列数据放到局部变量中
	while(@@fetch_status=0) --游标读取下一条数据是否成功
	begin
	  declare @isin int
	  declare @autoid int
	   select @isin=isnull([dkr_id],0) from [KMBS_REGISTER] where [DKR_CELLPHONE]=@cellphone
	 if @isin=0 
	    begin
	  
	   INSERT INTO  [KMBS_REGISTER]
           ([DKR_SID]
           ,[DKR_NAME]
           ,[DKR_NICKNAME]
           ,[DKR_CELLPHONE]
           ,[DKR_STORECODE]
           ,[CREATEDATE]
           ,[UPDATEDATE]
           ,[DKR_ISNEW]
           ,[DKR_ISFINISH]
           ,[DKR_CALLER],BITCHID)
           values(@sid,@username,@username,@cellphone,@storecode,GETDATE(),GETDATE(),0,0,0,@batchid)
			 select @autoid= @@identity
			 select @isin=isnull(dre_id,0) from REGISTER where DRE_CELLPHONE=@cellphone
			  if @isin>0 
				  begin
					update [KMBS_REGISTER] set  DKR_DRE_ID=@isin where  DKR_ID=@autoid
			  end 
	 
	   end
	 else
	 begin 
	    update  KMBS_SOURCE set ISIN=@isin where [SID]=@sid 
	 end

	fetch next from cur into   @sid,@username,@cellphone,@storecode --读取下一条数据记录放到局部变量中,变量的数目必须与游标选择列表中的列的数目一致
	end
	close cur--关闭游标
	deallocate cur--删除游标
	
   update KMBS_BATCH set 
    REPEATNUMBER=(select COUNT(*) from KMBS_SOURCE where BATCHID=@batchid and ISIN is not null)
   ,SUCCESSNUMBER=(select COUNT(*) from KMBS_REGISTER where BATCHID=@batchid)
   ,UPDATEDATE=GETDATE()
   ,TOTAL=(select COUNT(*) from KMBS_SOURCE where BATCHID=@batchid)
   ,[STATE]=2
   where BATCHID=@batchid
	
END
整体看上去没有错误,但细心的童鞋会发现问题:
  1、varchar未定义长度 
  2、if @isin=0 会不被执行,因为查出来的结果集有可能为null 故在下面做一下处理set @isin = isnull(@isin,0) 补救.
  3、 由于 select @isin=isnull([dkr_id],0)  不会被执行,所以导致变量一直不会更新
 所以在查询之前先设置一下:set @isin=null 最后进行一下优化处理:在头部声明时加上SET NOCOUNT ON;


分享到:
评论

相关推荐

    原创sql存储过程函数范例

    原创sql存储过程函数范例,一是为了自己方便查找,今天到公司因为没有我保存的一些范例,一个简单的例子写了半个小时,如果有范例直接套几分钟肯定搞定,所以索性上传到CSDN上,何时何地都能找到我的范例了。...

    delphi存储过程

    - 创建存储过程:在数据库管理工具中编写和创建存储过程,如SQL Server Management Studio或MySQL Workbench。 - 执行存储过程:在Delphi程序中,通过TADOCommand组件的CommandText属性设置存储过程名,Execute...

    sql2000教程 存储过程,触发器

    例如,创建一个简单的存储过程可能如下所示: ```sql CREATE PROCEDURE GetCustomerInfo @CustomerId int AS SELECT * FROM Customers WHERE CustomerId = @CustomerId ``` 2. **参数化**:存储过程可以接受...

    c#经典范例

    通过`SqlCommand`对象,我们可以创建一个指向存储过程的命令,然后设置其`CommandType`属性为`System.Data.CommandType.StoredProcedure`。接着,通过`ExecuteReader`或`ExecuteScalar`方法执行这个命令。例如: ``...

    C++ Qt5 范例开发大全,qt5开发及实例,QT

    读者会学习到如何创建一个简单的"Hello, World!"程序,理解Qt5的事件处理机制和信号与槽的概念,这是编写任何Qt应用程序的基础。 接着,书中会详细讲解Qt5的GUI组件,如按钮、标签、文本框、列表视图等,以及如何...

    资料创建精典范例文章

    本文详细介绍如何创建一个最简单的BIEE(Business Intelligence Enterprise Edition)资料库,并提供了一个“Hello World”式的基础示例。BIEE资料库是一个后缀名为`.rpd`的物理文件,其中包含了三种关键元数据:...

    Visual C++程序开发范例宝典.pdf

    不过,根据标题和描述推测,该资料可能包含了多个实际的MFC项目示例,比如简单的记事本程序、绘图软件、网络聊天客户端等,每个示例都详细介绍了从设计到编码的全过程,旨在帮助读者理解和掌握MFC框架的使用方法。...

    C#经典范例50讲

    在C#的学习过程中,首先会接触到基础语法,包括变量、数据类型、控制结构(如if语句、switch语句、循环结构for、while和do-while)以及函数的定义与调用。这些是编写任何程序的基础,理解和熟练运用这些语法是成为C#...

    ACE Reactor服务端简单范例

    **ACE Reactor服务端简单范例** ACE(Adaptive Communication Environment)是一个强大的、跨平台的C++库,它提供了一套全面的网络编程接口和工具,用于构建高性能、可伸缩的分布式系统。在本范例中,我们将关注的...

    PHP&My SQL范例精解——创建、修改、重用

    书中将详细解释MySQL的基本操作,如数据库和表的创建、数据的插入、查询、更新和删除,以及索引、视图和存储过程等高级特性。同时,还会涉及数据库设计原则,包括范式理论和数据库优化策略。 本书的重点在于PHP与...

    简单 Windows NT Service 的范例

    本范例旨在教你如何开发一个简单的Windows NT Service,包括创建、启动和停止服务的过程。我们将通过提供的源码和可执行文件来解析这个过程。 首先,我们来看`DemoSrv`项目。`.dpr`文件是Delphi项目文件,它定义了...

    Android App开发入门范例程序

    - SharedPreferences:轻量级数据存储方式,适用于保存简单的键值对数据。 - 文件存储:了解如何在Android设备上读写文件。 - SQLite数据库:用于存储结构化数据,学习创建表、插入、查询和更新数据。 4. **Ch06...

    ADO编程范例

    这涵盖了简单的SELECT语句,以及带有参数的存储过程调用。 3. 数据绑定:这个例子演示了如何将ADO Recordset对象绑定到控件,如DataGrid或ListBox,实现数据的可视化展示和交互。 4. 插入、更新和删除数据:范例中...

    db2 程序范例

    示例可能会包含创建和调用存储过程以及定义触发器的代码。 6. **安全性与权限管理**:这部分示例可能会涉及如何创建和管理数据库用户,设置访问权限,以及如何进行角色和授权操作。 7. **性能优化**:通过示例了解...

    Visual C++通用范例开发金典

    2. **变量和数据类型**:C++中的变量是存储数据的容器,数据类型决定了可以存储的数据种类。第1章的源代码可能包含各种变量声明和初始化的例子,如整型、浮点型、字符型等。 3. **运算符和表达式**:C++支持多种...

    Visual Basic范例开发大全

    4. **异常处理**:通过Try...Catch...Finally结构捕获并处理程序运行过程中可能出现的异常。 #### 八、最佳实践 1. **代码规范化**:遵循一定的命名规范,提高代码的可读性和维护性。 2. **注释说明**:对重要的...

    RCP jface 数据绑定 例子和测试范例

    在压缩包文件"存储过程.chm"中,可能包含了关于数据库存储过程的详细信息,这在RCP应用中也很常见,因为许多业务逻辑可能涉及数据库操作。存储过程是预编译的SQL代码集合,它可以提高性能,减少网络流量,并提供安全...

    Excel VBA编程入门范例

    Excel VBA(Visual Basic for Applications)是Microsoft Excel内置的一种编程语言,它允许用户自定义功能、创建宏和自动化工作流程。对于那些希望提高工作效率、实现复杂数据处理或创建交互式报表的人来说,掌握VBA...

    SQL基本语句大全及简单范例

    #### 创建存储过程(CREATE PROCEDURE) - 用于创建一段可重复使用的SQL代码块。 - 示例: ```sql CREATE PROCEDURE GetEmployeeDetails (@ID INT) AS BEGIN SELECT * FROM Employees WHERE ID = @ID; END; `...

Global site tag (gtag.js) - Google Analytics