sql游标的问题

ufgovfucw 2010-09-22 12:08:17
现在有一张表如下:
kmdm kmmx
101 1
102 0
10201 1
10202 1
10203 1
103 0
...
里面的关系是这样的,kmdm字段值,如果不带下级明细的kmmx字段值为1如果带有下级明细的kmmx字段值为0。
里面有错误,比如103不带下级明细值应该为1,我要逐一找出这样的记录并修改它的kmmx值为正确的值,我写了下面的sql语


怎么得出的结果是这样的呢:
kmdm kmmx
101 1
102 1
10201 1
10202 1
10203 1
103 1
...
结果kmmx字段值全变成了1.请大侠救我。

declare @kmdm varchar(16),@i int
declare xfkmmx cursor for select kmdm from gl_kmxx where gsdm='' for update
open xfkmmx
fetch next from xfkmmx into @kmdm
while(@@fetch_status<>-1)
begin
select @i=count(kmdm) from gl_kmxx where gsdm='' and kmdm like @kmdm
if @i>1
begin
update gl_kmxx set kmmx='0' where current of xfkmmx
end
else
begin
update gl_kmxx set kmmx='1' where current of xfkmmx
end
fetch next from xfkmmx into @kmdm
end
close xfkmmx
deallocate xfkmmx
...全文
51 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2010-09-22
  • 打赏
  • 举报
回复
create table tb(kmdm varchar(10),kmmx int)
insert into tb values('101' ,null)
insert into tb values('102' ,null)
insert into tb values('10201' ,null)
insert into tb values('10202' ,null)
insert into tb values('10203' ,null)
insert into tb values('103' ,null)
go

update tb set kmmx = (case when exists (select 1 from tb where charindex(t.kmdm,kmdm) > 0 and t.kmdm <> kmdm) then 0 else 1 end) from tb t

select * from tb

drop table tb

/*
kmdm kmmx
---------- -----------
101 1
102 0
10201 1
10202 1
10203 1
103 1

(所影响的行数为 6 行)
*/
SQLCenter 2010-09-22
  • 打赏
  • 举报
回复
--> 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #
create table #(kmdm int, kmmx int)
insert into #
select 101, 1 union all
select 102, 1 union all
select 10201, 1 union all
select 10202, 1 union all
select 10203, 1 union all
select 103, 1

-- 全变1了是吧?那把有下级明细的找出来,UPDATE为0
update # set kmmx = 0 from # t where exists (select 1 from # where kmdm<>t.kmdm and ltrim(kmdm) like ltrim(t.kmdm)+'%')

select * from #
/*
kmdm kmmx
----------- -----------
101 1
102 0
10201 1
10202 1
10203 1
103 1
*/

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧