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存储过程函数范例,一是为了自己方便查找,今天到公司因为没有我保存的一些范例,一个简单的例子写了半个小时,如果有范例直接套几分钟肯定搞定,所以索性上传到CSDN上,何时何地都能找到我的范例了。...
- 创建存储过程:在数据库管理工具中编写和创建存储过程,如SQL Server Management Studio或MySQL Workbench。 - 执行存储过程:在Delphi程序中,通过TADOCommand组件的CommandText属性设置存储过程名,Execute...
例如,创建一个简单的存储过程可能如下所示: ```sql CREATE PROCEDURE GetCustomerInfo @CustomerId int AS SELECT * FROM Customers WHERE CustomerId = @CustomerId ``` 2. **参数化**:存储过程可以接受...
通过`SqlCommand`对象,我们可以创建一个指向存储过程的命令,然后设置其`CommandType`属性为`System.Data.CommandType.StoredProcedure`。接着,通过`ExecuteReader`或`ExecuteScalar`方法执行这个命令。例如: ``...
读者会学习到如何创建一个简单的"Hello, World!"程序,理解Qt5的事件处理机制和信号与槽的概念,这是编写任何Qt应用程序的基础。 接着,书中会详细讲解Qt5的GUI组件,如按钮、标签、文本框、列表视图等,以及如何...
本文详细介绍如何创建一个最简单的BIEE(Business Intelligence Enterprise Edition)资料库,并提供了一个“Hello World”式的基础示例。BIEE资料库是一个后缀名为`.rpd`的物理文件,其中包含了三种关键元数据:...
不过,根据标题和描述推测,该资料可能包含了多个实际的MFC项目示例,比如简单的记事本程序、绘图软件、网络聊天客户端等,每个示例都详细介绍了从设计到编码的全过程,旨在帮助读者理解和掌握MFC框架的使用方法。...
在C#的学习过程中,首先会接触到基础语法,包括变量、数据类型、控制结构(如if语句、switch语句、循环结构for、while和do-while)以及函数的定义与调用。这些是编写任何程序的基础,理解和熟练运用这些语法是成为C#...
**ACE Reactor服务端简单范例** ACE(Adaptive Communication Environment)是一个强大的、跨平台的C++库,它提供了一套全面的网络编程接口和工具,用于构建高性能、可伸缩的分布式系统。在本范例中,我们将关注的...
书中将详细解释MySQL的基本操作,如数据库和表的创建、数据的插入、查询、更新和删除,以及索引、视图和存储过程等高级特性。同时,还会涉及数据库设计原则,包括范式理论和数据库优化策略。 本书的重点在于PHP与...
本范例旨在教你如何开发一个简单的Windows NT Service,包括创建、启动和停止服务的过程。我们将通过提供的源码和可执行文件来解析这个过程。 首先,我们来看`DemoSrv`项目。`.dpr`文件是Delphi项目文件,它定义了...
- SharedPreferences:轻量级数据存储方式,适用于保存简单的键值对数据。 - 文件存储:了解如何在Android设备上读写文件。 - SQLite数据库:用于存储结构化数据,学习创建表、插入、查询和更新数据。 4. **Ch06...
这涵盖了简单的SELECT语句,以及带有参数的存储过程调用。 3. 数据绑定:这个例子演示了如何将ADO Recordset对象绑定到控件,如DataGrid或ListBox,实现数据的可视化展示和交互。 4. 插入、更新和删除数据:范例中...
示例可能会包含创建和调用存储过程以及定义触发器的代码。 6. **安全性与权限管理**:这部分示例可能会涉及如何创建和管理数据库用户,设置访问权限,以及如何进行角色和授权操作。 7. **性能优化**:通过示例了解...
2. **变量和数据类型**:C++中的变量是存储数据的容器,数据类型决定了可以存储的数据种类。第1章的源代码可能包含各种变量声明和初始化的例子,如整型、浮点型、字符型等。 3. **运算符和表达式**:C++支持多种...
4. **异常处理**:通过Try...Catch...Finally结构捕获并处理程序运行过程中可能出现的异常。 #### 八、最佳实践 1. **代码规范化**:遵循一定的命名规范,提高代码的可读性和维护性。 2. **注释说明**:对重要的...
在压缩包文件"存储过程.chm"中,可能包含了关于数据库存储过程的详细信息,这在RCP应用中也很常见,因为许多业务逻辑可能涉及数据库操作。存储过程是预编译的SQL代码集合,它可以提高性能,减少网络流量,并提供安全...
Excel VBA(Visual Basic for Applications)是Microsoft Excel内置的一种编程语言,它允许用户自定义功能、创建宏和自动化工作流程。对于那些希望提高工作效率、实现复杂数据处理或创建交互式报表的人来说,掌握VBA...
#### 创建存储过程(CREATE PROCEDURE) - 用于创建一段可重复使用的SQL代码块。 - 示例: ```sql CREATE PROCEDURE GetEmployeeDetails (@ID INT) AS BEGIN SELECT * FROM Employees WHERE ID = @ID; END; `...