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

本文详细介绍了如何创建测试用户表、插入数据,并通过事务管理更新数据状态,确保操作的一致性和完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


--创建测试用户的表与数据

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

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值