您的位置:首页 > 其它

游标与事务结合使用,在游标内启用事务;判断数据类型不符合时执行下一条

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
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: