大虾下救命,sql怎么写?
大虾下救命
我遇见了一个问题不知道怎么解决
数据表
a b c d
1 1 1 0
2 1 1 1
3 1 1 0
. . . .
. . . .
. . . .
10000 . . 1
每次随即的取得一条数据
保保证每次取得 d 为0;
取得的数据d改改变成1;
问题点数:100、回复次数:13Top
1 楼zjcxc(邹建)回复于 2004-12-04 17:02:04 得分 10
--随机取一条d=0的数据
select top 1 * from 表 where d=0 order by newid()Top
2 楼zjcxc(邹建)回复于 2004-12-04 17:02:37 得分 10
取数后把d改为1,这个要看你的表中有没有主键了,没有主键无法解决记录定位问题.Top
3 楼lmj2003(雁不归)回复于 2004-12-04 17:03:25 得分 10
UPDATE table SET d=1
WHERE d=0 AND a IN(SELECT MAX(a) AS a FROM table WHERE d=0 )
Top
4 楼lmj2003(雁不归)回复于 2004-12-04 17:05:43 得分 10
学习 zjcxc(邹建) 老大的
UPDATE table SET d=1
WHERE d=0 AND a IN(SELECT top 1 a FROM table WHERE d=0 order by newid() )
Top
5 楼lzymagi(逸)回复于 2004-12-04 17:07:14 得分 10
取d为0简单 update d=1你没有条件取得唯一的行。是不可能做到的。
不过你用临时表就可以做
Top
6 楼zjcxc(邹建)回复于 2004-12-04 17:10:28 得分 10
to lzymagi(逸)
临时表更新不回原表,还是有问题Top
7 楼yyl001(70-229问题连载)回复于 2004-12-04 17:14:22 得分 10
d=0
select top 1 * from 表 where d=0
d=1
select top 1 * from 表 where d=1Top
8 楼zjcxc(邹建)回复于 2004-12-04 17:23:41 得分 10
--如果a列是主键,则这样取就行了
declare @a int
select top 1 @a=a from 表 where d=0 order by newid()
update 表 set d=1 where a=@a
select * from 表 where a=@aTop
9 楼bingjiling(销售)回复于 2004-12-04 20:49:08 得分 0
大虾下救命
我遇见了一个问题不知道怎么解决
数据表示这样的
a b c d
1 1 1 0
2 1 1 1
3 1 1 0
. . . .
. . . .
. . . .
10000 . . 1
每次{随机}的取得一条数据
保保证每次取得 d 为0;
取得的数据d改改变成1;
随机Top
10 楼xiaoxiangqing(肖祥清)回复于 2004-12-04 22:31:53 得分 10
--假設表名為stock,字段a為主鍵
declare @a int
select top 1 @a=a from stock where d=0 order by newid()
--随机取一条d=0的数据
select * from stock where a=@a
--更新剛才随机取的那條記錄為1
update stock set d=1 where a=@aTop
11 楼passionke(每一步都改变未来,却只能有一种结局!)回复于 2004-12-04 22:46:46 得分 0
upTop
12 楼zjcxc(邹建)回复于 2004-12-06 07:59:05 得分 0
--每次{随机}的取得一条数据,保保证每次取得 d 为0;取得的数据d改改变成1;
--就是这个嘛
declare @a int
select top 1 @a=a from 表 where d=0 order by newid()
update 表 set d=1 where a=@a
select * from 表 where a=@a
Top
13 楼zjcxc(邹建)回复于 2004-12-06 08:03:24 得分 10
--每次{随机}的取得一条数据,保保证每次取得 d 为0;取得的数据d改改变成1;
--如果你要更新前的状态,并且保证多用户下不出现冲突,则加锁
declare @a int,@b int,@c int,@d int
begin tran
--取数并加锁
select top 1 @a=a,@b=b,@c=c,@d=d
from 表 with(TABLOCKX)
where d=0 order by newid()
--更新
update 表 set d=1 where a=@a
commit tran
--显示取得的数据
select a=@a,b=@b,c=@c,d=@d
Top




