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上,何时何地都能找到我的范例了。...
实例138 通过SESSION存储数据 204 实例139 通过SESSION实现购物车的功能 205 5.6 框架的应用 209 实例140 框架在聊天室中的应用 209 实例141 使用框架嵌套技术居中显示框架页 211 第6章 PHP与MySQL数据库...
2.2 创建第一个android项目(hello android!) 11 2.3 android应用程序架构——从此开始 15 2.4 可视化的界面开发工具 18 2.5 部署应用程序到android手机 19 第3章 用户人机界面 22 3.1 更改与显示...
6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与AlarmManager的运用 6.11 黑名单来电自动静音——PhoneStateListener与AudioManager 6.12 手机翻背面即静音震动——...
2.2 创建第一个Android项目(Hello Android!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签 3.2 更改手机窗口画面底色 ...
2.2 创建第一个Android项目(Hello Android!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签 3.2 更改手机窗口画面底色 ...
2.2 创建第一个Android项目(Hello Android!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签 3.2 更改手机窗口画面底色 ...
2.2 创建第一个Android项目(Hello Android!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签 3.2 ...
2.2 创建第一个Android项目(Hello Android!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示...
cc实例216 删除视图 8.6 触发器 cc实例217 创建触发器 cc实例218 在程序中使用触发器 8.7 存储过程 cc实例219 创建存储过程 cc实例220 删除存储过程 cc实例221 在程序中使用存储过程 cc实例222 ...
6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与AlarmManager的运用 6.11 黑名单来电自动静音——PhoneStateListener与AudioManager 6.12 手机翻背面即静音震动——...
实例186 文件复制过程中显示进度条 238 5.6 指定类型的文件操作 239 实例187 对INI文件进行操作 239 实例188 文本文件的操作 241 实例189 在程序中使用自定义文件格式 242 实例190 简单的文件加密解密 ...
6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与AlarmManager的运用 6.11 黑名单来电自动静音——PhoneStateListener与AudioManager 6.12 手机翻背面即静音震动——...
ExcuteProc.aspx 执行存储过程的范例 ExcuteProcParm.aspx 执行带参数的存储过程的范例 ExcuteReader.aspx 执行返回DataReader类型的范例 ExcuteScalar.aspx 执行返回一个字段的范例 ...
精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...
精选570个典型范例,全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、...
cc实例219 创建存储过程 cc实例220 删除存储过程 cc实例221 在程序中使用存储过程 cc实例222 调用具有输出参数的存储过程 8.8 数据库结构的读取与修改 cc实例223 读取Access数据库结构...