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`命令从
游标
中读取下一行数据。当
游标
到达最后一行时,循