现在我数据库表中有1万条数据,有一个字段是flag
我现在想把前2000条的flag更改成1
第2001条到7000条flag改成2
第7001条到9000条改成3
剩下的改成4 怎么实现?前提是这个表中没有自动编号的字段在上篇帖子中,有朋友这样回答
alter table tb add px int identity(1,1)
go
update tb set flag=1 where px<=2000
update tb set flag=2 where px between 2001 and 7000
---依次类推
--最后,
alter table tb drop column px
go但是不能实现我的那个,因为在我的表中有很多数据,我只需要改flag=0的,而在此之前已经有很多是等于其他数值的记录了,如果我添加一行ID列那所有的数据都会有id,也许我要修改的数据并不是连贯的,而且id并不会小于1万,这样的更新就不行了。
有没有其他方法能实现我说的这个?
1万条数据的得到方法是
select top 10000 * from datas where flag=0
我现在想把前2000条的flag更改成1
第2001条到7000条flag改成2
第7001条到9000条改成3
剩下的改成4 怎么实现?前提是这个表中没有自动编号的字段在上篇帖子中,有朋友这样回答
alter table tb add px int identity(1,1)
go
update tb set flag=1 where px<=2000
update tb set flag=2 where px between 2001 and 7000
---依次类推
--最后,
alter table tb drop column px
go但是不能实现我的那个,因为在我的表中有很多数据,我只需要改flag=0的,而在此之前已经有很多是等于其他数值的记录了,如果我添加一行ID列那所有的数据都会有id,也许我要修改的数据并不是连贯的,而且id并不会小于1万,这样的更新就不行了。
有没有其他方法能实现我说的这个?
1万条数据的得到方法是
select top 10000 * from datas where flag=0
解决方案 »
- 如何用命令行方式配置SQL SERVER开启TCP/IP?
- 存储过程中一个表的某个字段值为另一个表的表名该怎么写啊?
- 用户代码未处理SqlException的问题!
- sqlserver事务可以不锁表吗
- 如何对选择的月份加3个月,并且满12个的就往后进一年。
- 字符串截位的问题
- 請教一句SQL !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 大力:帮我看一下字符串类型的交叉数据表如何做
- office2000的Access支持sql语句中的case吗?
- 新手求助:关于XML文档处理的问题
- 邹老大书上一个问题不懂 大家帮帮忙~~~
- [实在没分了……] 请问如果看Sql2005 打到SP几补丁
-->1.增加辅助列
alter table tb add id int identity(1,1)
-->2.开始更新
update tb
set flag=case when id <=2000 then 1
when id between 2001 and 7000 then 2
when id between 7001 and 9000 then 3
else 4
end
where flag=0
-->3.删除辅助列
alter table tb drop column id
declare @ids int
declare cur cursor
for
select top 2000 px from tb where flag = 0 order by px
--第二次
--select top 5000 from ( select top 7000 px from tb where flag = 0 order by px) b order by px descopen cur
fetch next from cur into @ids
while @@FETCH_STATUS = 0
begin update tb set flag = 1 where px = ids
fetch next from cur into @idsendclose cur
deallocate cur
-->1.增加辅助列
alter table tb add id int identity(1,1)
-->2.开始更新
update tb
set flag=case when id <=2000 then 1
when id between 2001 and 7000 then 2
when id between 7001 and 9000 then 3
else 4
end
where flag=0
and id<=10000
-->3.删除辅助列
alter table tb drop column id
第2001条到7000条flag改成2
第7001条到9000条改成3
剩下的改成4 且保存原有flag不等于0的不动3 7楼是可以的。
第2001条到7000条flag改成2
第7001条到9000条改成3
剩下的改成4 且保持原有flag不等于0的不动3 7楼是可以的。
如果添加一个自定义编号,那么从id=1一直到id=10000,所有的flag都不等于0你那个就失效了
而且我的flag=0的数据并不是连贯的
明白我的意思吗?
-->1.增加辅助列
alter table tb add id int identity(1,1)
-->2.开始更新
update a
set a.flag=case when a.id <=2000 then 1
when a.id between 2001 and 7000 then 2
when a.id between 7001 and 9000 then 3
else 4
end
from tb a
where a.flag=0
and (select count(1) from tb where flag=a.flag and id<=a.id)<=10000
-->3.删除辅助列
alter table tb drop column id
还有一个用户表users,在我程序中有个分配客户的页面,首先输入要分配客户的数量,然后选择分配给哪个用户,每个用户都有个分配数量
如:
预分配客户数量:100
分配用户:用户名 用户ID 个数
Mars.CN 1 20
Suolong123 2 35
Admin 3 25
LastUser 4 20用户的数量不定,有时候多有时候少,客户的数量也是手输的这样,我需要一个分配客户的sql语句,要把client表的user_id改成用户ID
这个怎么实现?
我想写成一个存储过程
SET @i=0;UPDATE tb SET
flag = CASE WHEN @i<=2000 THEN 1
WHEN @i BETWEEN 2001 AND 7000 THEN 2
WHEN @i BETWEEN 70001 AND 9000 THEN 3
ELSE 4 END,
@i=@i+1;
SET @i=0;UPDATE tb SET
flag = CASE WHEN @i<=2000 THEN 1
WHEN @i BETWEEN 2001 AND 7000 THEN 2
WHEN @i BETWEEN 70001 AND 9000 THEN 3
ELSE 4 END,
@i=@i+1
WHERE flag=0
AND @i<=10000;
flag = CASE WHEN @i<=2000 THEN 1
WHEN @i BETWEEN 2001 AND 7000 THEN 2
WHEN @i BETWEEN 70001 AND 9000 THEN 3
ELSE 4 END,
@i=@i+1
WHERE flag=0;
drop table tb
go
create table tb(flag int)
insert tb select top 100 0 from sysobjects
go
DECLARE @i INT;
SET @i=0;UPDATE top(90) tb SET
flag = CASE WHEN @i<=2000 THEN 1
WHEN @i BETWEEN 2001 AND 7000 THEN 2
WHEN @i BETWEEN 70001 AND 9000 THEN 3
ELSE 4 END,
@i=@i+1
WHERE flag=0
go
select * from tb
/*
flag
-----------
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0(100 行受影响)
*/
drop table tb
go
create table tb(flag int)
insert tb select top 120 0 from sysobjects,syscolumns
go
-->1.增加辅助列
alter table tb add id int identity(1,1)
-->创建虚拟环境
update tb set flag=9 where id between 55 and 65
-->2.开始更新
update a
set a.flag=case when a.id <=20 then 1
when a.id between 21 and 70 then 2
when a.id between 71 and 90 then 3
else 4
end
from tb a
where a.flag=0
and (select count(1) from tb where flag=a.flag and id<=a.id)<=100
-->3.删除辅助列
alter table tb drop column id
go
-->4.查询结果
select * from tb
/*
flag
-----------
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
9
9
9
9
9
9
9
9
9
9
9
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
0
0
0
0
0
0
0
0
0(120 行受影响)*/