You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2012:如何随机将用户分配给两个指定OwnerId?

SQL Server 2012实现用户随机分配给指定所有者

在SQL Server 2012中,直接使用RAND()函数无法实现每行独立随机分配——因为RAND()在UPDATE语句中只会计算一次,所有符合条件的行都会被设置为同一个值。以下是两种可行的实现方案:

方案一:基于NEWID()的完全随机分配

利用NEWID()生成每行唯一的GUID,通过CHECKSUM()将其转换为整数后取模,随机选择目标OwnerId:

UPDATE Users
SET OwnerId = CASE 
    WHEN CHECKSUM(NEWID()) % 2 = 0 THEN 64 
    ELSE 72 
END
WHERE OwnerId = 37

说明

  • NEWID():每行都会生成一个唯一的GUID,确保每行的随机判断独立
  • CHECKSUM(NEWID()):将GUID转换为整数,方便后续取模运算
  • 取模%2会得到0或1两个结果,对应分配给64或72两个所有者,分配比例接近50%

方案二:均衡分配(尽量各分一半)

如果需要更均衡的分配比例,可先通过行号和总数判断,将随机排序后的用户平分为两组:

WITH UserCTE AS (
    SELECT 
        OwnerId,
        ROW_NUMBER() OVER (ORDER BY NEWID()) AS RowNum,
        COUNT(*) OVER () AS TotalCount
    FROM Users
    WHERE OwnerId = 37
)
UPDATE UserCTE
SET OwnerId = CASE 
    WHEN RowNum <= TotalCount / 2 THEN 64 
    ELSE 72 
END

说明

  • 先通过CTE给每个目标用户按随机顺序(ORDER BY NEWID())生成行号,并统计总数量
  • 前半部分行分配给64,后半部分分配给72,确保分配比例尽可能接近1:1

内容的提问来源于stack exchange,提问作者Jakxna360

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:15:50