Bil*_*ill 14 sql sql-server sql-server-2012
说我有三个价值观,比尔,史蒂夫,杰克.我想用这些值随机更新一个表,例如
更新联系人设置firstname =('比尔','史蒂夫','杰克')其中city ='NY'
我如何随机化这些值?
谢谢
Gio*_*uri 21
您可以使用以下技巧执行此操作:
update c set name=ca.name
from contacts c
outer apply(select top 1 name
from (values('bill'),('steve'),('jack')) n(name)
where c.id = c.id order by newid())ca;
Run Code Online (Sandbox Code Playgroud)
c.id = c.id只是一个虚拟谓词,强制sql引擎为每个外行调用子查询.这是小提琴http://sqlfiddle.com/#!6/8ecca/22
这是一些喜欢使用 choose
with cte as (
select *, (ABS(CHECKSUM(NewId())) % 3) + 1 as n
from contacts
where city = 'NY'
)
update cte
set firstname = choose(n, 'Bill','Steve','Jack')
Run Code Online (Sandbox Code Playgroud)
你可以做这样的事情
-- Storing the list of strings in a CTE
WITH PossibleValues AS
( SELECT 'Bill' AS Name,
1 AS Number
UNION SELECT 'Steve' AS NAME,
2 AS Number
UNION SELECT 'Jack' AS NAME,
3 AS Number
)
UPDATE contacts
SET firstname = (SELECT Name
FROM PossibleValues
WHERE PossibleValues.Number = FLOOR(RAND()*(4-1)+1))
WHERE City = 'NY'
Run Code Online (Sandbox Code Playgroud)
FLOOR(RAND()*(4-1)+1)每次运行查询时,都会生成 1 到 3 之间的随机数。因此,您每次都会选择一个随机名称。
| 归档时间: |
|
| 查看次数: |
11505 次 |
| 最近记录: |