T-SQL使用RAND(种子)将结果的顺序随机化

Jim*_*mbo 0 sql t-sql random sql-server-2012

我使用以下语句(以缩短的版本为例)从Microsoft SQL Express 2012数据库获取结果:

SELECT id, name, city 
FROM tblContact 
ORDER BY RAND(xxx)
Run Code Online (Sandbox Code Playgroud)

并注入该xxx部分的会话中存储的种子,以使结果对于给定会话始终是随机的(因此,在翻阅结果时,用户不会看到重复项)

问题:无论种子是什么,结果都以相同顺序返回

我也尝试过这个:

SELECT id, name, city, RAND(xxx) AS OrderValue 
FROM tblContact 
ORDER BY OrderValue
Run Code Online (Sandbox Code Playgroud)

两者都给出相同的结果(出乎意料的结果)-我使用错误吗?

Dim*_*imt 5

rand(seed)整个查询的值将相同。您想使用ID列在每行的基础上生成随机值:

SELECT id, name, city, RAND(xxx + id) AS OrderValue 
  FROM tblContact ORDER BY OrderValue
Run Code Online (Sandbox Code Playgroud)

但是,过去我一直在开发一些功能,在该功能中,我需要为不同的会话确定随机顺序,但在同一会话中具有相同的顺序。当时我用过HASHBYTES(),效果很好:

 SELECT id, name, city, HASHBYTES('md5',cast(xxx+id as varchar)) AS OrderValue 
   FROM tblContact ORDER BY OrderValue
Run Code Online (Sandbox Code Playgroud)