求助:表数据记录随机替换

midas520 manager  2015-12-16 09:15:56
本人是一名网络管理员,顺便也简单的维护下数据库,现有一个表中数据更新问题需要各位大大求助

场景:
数据库软件MS--SQL SERVER
表名: a, 字段:jus(值:1,0),tid(自动生成,唯一),val
要求:
将表a的指定TID的数据记录VAL值替换成:随机取一条表中其它记录中jus字段为1的一条记录的VAL值。
...全文
81 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Yole 2015-12-16
引用 5 楼 net775 的回复:
[quote=引用 3 楼 u010192842 的回复:] select top 1 * from a order by newid()
谢谢,我需要的是用这个随机值替换掉某一条记录的值。能帮忙写整个语句吗?[/quote] 参看4#
回复
midas520 2015-12-16
引用 4 楼 Tiger_Zhao 的回复:
-- 测试数据
DECLARE @a TABLE(jus int, tid int identity, val int)

INSERT @a(jus,val)
SELECT 1,33 UNION ALL
SELECT 0,21 UNION ALL
SELECT 1,22 UNION ALL
SELECT 0,18 UNION ALL
SELECT 1,45 UNION ALL
SELECT 1,16

--SELECT * FROM @a

-- 参数
DECLARE @tid int
SET @tid = 2

-- 多次测试
DECLARE @i int
SET @i = 1
WHILE @i<=3
BEGIN
    -- 更新
    UPDATE a
       SET a.val = t.val
      FROM @a a,
           (
                SELECT TOP 1 *
                  FROM @a
                 WHERE jus = 1
              ORDER BY NEWID()
           ) t
     WHERE a.tid = @tid
    -- 查看结果
    SELECT *
      FROM @a
     WHERE tid = @tid

    SET @i = @i + 1
END
        jus         tid         val
----------- ----------- -----------
          0           2          33

        jus         tid         val
----------- ----------- -----------
          0           2          45

        jus         tid         val
----------- ----------- -----------
          0           2          33
灰常 感谢!
回复
midas520 2015-12-16
引用 3 楼 u010192842 的回复:
select top 1 * from a order by newid()
谢谢,我需要的是用这个随机值替换掉某一条记录的值。能帮忙写整个语句吗?
回复
Tiger_Zhao 2015-12-16
-- 测试数据
DECLARE @a TABLE(jus int, tid int identity, val int)

INSERT @a(jus,val)
SELECT 1,33 UNION ALL
SELECT 0,21 UNION ALL
SELECT 1,22 UNION ALL
SELECT 0,18 UNION ALL
SELECT 1,45 UNION ALL
SELECT 1,16

--SELECT * FROM @a

-- 参数
DECLARE @tid int
SET @tid = 2

-- 多次测试
DECLARE @i int
SET @i = 1
WHILE @i<=3
BEGIN
-- 更新
UPDATE a
SET a.val = t.val
FROM @a a,
(
SELECT TOP 1 *
FROM @a
WHERE jus = 1
ORDER BY NEWID()
) t
WHERE a.tid = @tid
-- 查看结果
SELECT *
FROM @a
WHERE tid = @tid

SET @i = @i + 1
END

        jus         tid         val
----------- ----------- -----------
0 2 33

jus tid val
----------- ----------- -----------
0 2 45

jus tid val
----------- ----------- -----------
0 2 33
回复
Yole 2015-12-16
select top 1 * from a order by newid()
回复
midas520 2015-12-16
引用 1 楼 xdashewan 的回复:
数据库随机基本只有一种方式就是order by newid
怎么做到从随机中选一条,用其中的值替换掉指定的字段值???
回复
xdashewan 2015-12-16
数据库随机基本只有一种方式就是order by newid
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-12-16 09:15
社区公告
暂无公告