declare autosale_cursor cursor for select distinct cVoucher_No from cf20190219 open autosale_cursor declare @voucherno varchar(60) declare @i int,@error int set @i=1 set @error=0 begin tran --申明事务 fetch next from autosale_cursor into @voucherno while @@fetch_status=0 begin print @voucherno print @i set @i=@i+1 set @error= @error + @@ERROR --0正确 fetch next from autosale_cursor into @voucherno if @error=0 begin commit tran --提交事务 begin rollback tran --回滚事务 close autosale_cursor deallocate autosale_cursor use hbposev9_branchbegin declare autosale_cursor cursor for select distinct cVoucher_No from cf20190219 open autosale_cursor declare @voucherno varchar(60) declare @i int,@error int set @i...
前两天跟.net前辈请教数据库 游标 的问题,据说 游标 现在很少用了,在项目中遇到了循环更新的问题,相比循环调用存储过程(反复连接、断开数据库)而言,把逻辑写在存储过程中会更高效些,在这里想做个简单的例子和大家分享一下: C#代码部分:创建一个datatable,作为参数传入存储过程 DataTable dt = new DataTable();
--删除表drop table bank --创建表create table bank(bankid int primary key,bankname varchar(20) not null,bankmoney money check(bankmoney>=0)) --插入数据insert into bank values(1,'张三',1000)insert into bank va...
IF EXISTS (SELECT * FROM sys.procedures WHERE name='proc_tranDemo') DROP PROCEDURE proc_tranDemo CREATE PROC proc_tranDemo DECLARE @employeeId INT; DECLARE @errorCount INT; -- 插入测试数据 INSERT INTO TestTable (id, name) VALUES (1, '张三') INSERT INTO TestTable (id, name) VALUES (2, '李四') INSERT INTO TestTable (id, name) VALUES (3, '王五') -- 声明 游标 DECLARE test_cursor CURSOR FOR SELECT id, name FROM TestTable -- 打开 游标 OPEN test_cursor -- 声明变量 DECLARE @id INT, @name VARCHAR(20) -- 从 游标 中读取数据 FETCH NEXT FROM test_cursor INTO @id, @name -- 循环读取 游标 中的所有数据 WHILE @@FETCH_STATUS = 0 BEGIN -- 打印数据 PRINT 'ID: ' + CAST(@id AS VARCHAR) + ', Name: ' + @name -- 继续读取下一行数据 FETCH NEXT FROM test_cursor INTO @id, @name -- 关闭并删除 游标 CLOSE test_cursor DEALLOCATE test_cursor -- 删除测试表 DROP TABLE TestTable 在这个示例中,我们首先创建了一个名为`TestTable`的表,并向其插入了三条记录。然后我们声明了一个名为`test_cursor`的 游标 ,并将其指向表`TestTable`中的所有数据。接下来我们使用`OPEN`命令打开 游标 ,然后使用`FETCH`命令从 游标 中读取数据。我们在循环中使用`WHILE`语句,每次循环时都会调用`FETCH`命令从 游标 中读取下一行数据。当 游标 到达最后一行时,循