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

来源:互联网 发布:软件操作手册 编辑:程序博客网 时间:2024/06/05 14:56


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

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 t1select 'jsm','1020','0'union all select 'dj','200','0'union all select 'jq','300','0'


declare @userid varchar(128),@MONEYvarchar(50),@idint

declare crs_user cursor for  select userid,[money],idfrom 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是否为有效的整数、浮点数、moneydecimal 类型。返回值为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

 



0 0
原创粉丝点击