游标与事务结合使用,在游标内启用事务;判断数据类型不符合时执行下一条
2015-08-15 20:07
447 查看
--创建测试用户的表与数据
CREATE TABLE [dbo].[t1](
[id] [int] IDENTITY(1,1)
NOT NULL,
[userId] [varchar](20)
COLLATEChinese_PRC_CI_AS
NULL,
[money] [varchar](50)
COLLATEChinese_PRC_CI_AS
NULL,
[state] [int] NULL
)
CREATE TABLE [dbo].[t2](
[id] [int] IDENTITY(1,1)
NOT NULL,
[userId] [varchar](20)
COLLATEChinese_PRC_CI_AS
NULL,
[money] [decimal](10, 2)
NULL,
[date] [datetime] NULL
DEFAULT (getdate())
)
insert into t1
select 'jsm','1020','0'
union all
select 'dj','200','0'
union all
select 'jq','300','0'
declare @userid
varchar(128),@MONEY
varchar(50),@id
int
declare crs_user
cursor for select userid,[money],id
from t1 where state=0
open crs_user
fetch next
from crs_user into @userid,@MONEY,@id
while(@@fetch_status=0)
begin
print @userid
if(ISNUMERIC(@MONEY)=1)--ISNUMERIC方法判断@MONEY是否为有效的整数、浮点数、money
或decimal
类型。返回值为1 时,指示可将expression
至少转换为上述数值类型中的一种,否则返回 0
Begin
begin
tran --开始执行事务
update t1
set state=1 where id=@id
insert
into t2(userID,[money])
VALUES(@userid,@MONEY)
if(@@error>0)
begin
rollback
tran
print
'rollback'
end
else
begin
commit
tran
print
'commit'
end
end
fetch next
from crs_user into@userid,@MONEY,@id
end
close crs_user
deallocate crs_user
CREATE TABLE [dbo].[t1](
[id] [int] IDENTITY(1,1)
NOT NULL,
[userId] [varchar](20)
COLLATEChinese_PRC_CI_AS
NULL,
[money] [varchar](50)
COLLATEChinese_PRC_CI_AS
NULL,
[state] [int] NULL
)
CREATE TABLE [dbo].[t2](
[id] [int] IDENTITY(1,1)
NOT NULL,
[userId] [varchar](20)
COLLATEChinese_PRC_CI_AS
NULL,
[money] [decimal](10, 2)
NULL,
[date] [datetime] NULL
DEFAULT (getdate())
)
insert into t1
select 'jsm','1020','0'
union all
select 'dj','200','0'
union all
select 'jq','300','0'
declare @userid
varchar(128),@MONEY
varchar(50),@id
int
declare crs_user
cursor for select userid,[money],id
from t1 where state=0
open crs_user
fetch next
from crs_user into @userid,@MONEY,@id
while(@@fetch_status=0)
begin
print @userid
if(ISNUMERIC(@MONEY)=1)--ISNUMERIC方法判断@MONEY是否为有效的整数、浮点数、money
或decimal
类型。返回值为1 时,指示可将expression
至少转换为上述数值类型中的一种,否则返回 0
Begin
begin
tran --开始执行事务
update t1
set state=1 where id=@id
insert
into t2(userID,[money])
VALUES(@userid,@MONEY)
if(@@error>0)
begin
rollback
tran
'rollback'
end
else
begin
commit
tran
'commit'
end
end
fetch next
from crs_user into@userid,@MONEY,@id
end
close crs_user
deallocate crs_user
相关文章推荐
- Andrew Ng机器学习公开课第一节笔记
- 广州人民优步奖励政策(7月13日~7月19日)
- 波折yosemite下载过程
- 9、Cocos2dx 3.0游戏开发三查找值小工厂方法模式和对象
- Joda
- 去哪网实习总结:怎样配置数据库连接(JavaWeb)
- 10.Regular Expression Matching
- KMP算法超详细入门
- HDU 1796 How many integers can you find(容斥原理)
- android studio 使用AIDL实现IPC
- HDU ACM 1001 Sum Problem
- uva 1149 Bin Packing
- hdoj1950Bridging signals(最长上升子序列)
- HDU 5335 Walk Out (BFS后贪心)
- 黑马程序员----集合(Collection)
- Jfinal极速开发微信系列教程(一)--------------Jfinal_weixin demo的使用分析
- 服务器设置浏览器的文档模式
- .NET: WPF Template
- Java套接字
- html5的UI框架