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)
两者都给出相同的结果(出乎意料的结果)-我使用错误吗?
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)