【问题标题】:Updating a SQL Server table with random names使用随机名称更新 SQL Server 表
【发布时间】:2016-02-01 04:27:34
【问题描述】:

我正在尝试以下方法:

update [Employees] set Last_User = 

(select top 1 name from 
(select 'John' as name 
union select 'Tim' as name
union select 'Jane' as name
union select 'Jack' as name
union select 'Steve' as name
union select 'Ann' as name
) 

as names order by newid())

但所有行都保持相同的名称。我怎样才能让它变化?

注意:名称是在查询中输入的,而不是来自另一个表。

谢谢

【问题讨论】:

标签: sql sql-server


【解决方案1】:

您正在尝试更新整个列而不是更新每一行,因此生成的第一个值会更新到所有行,您可以使用 T-SQL 完成预期任务

DECLARE @counter int = 1

WHILE @counter <= (SELECT COUNT(1) FROM [Employees]) --or any speific row set you want to modify
BEGIN

UPDATE a
 set Last_User = 
(SELECT top 1 name from 
(SELECT 'John' as name 
UNION SELECT 'Tim' AS name
UNION SELECT 'Jane' AS name
UNION SELECT 'Jack' AS name
UNION SELECT 'Steve' AS name
UNION SELECT 'Ann' AS name
) 

AS names ORDER BY NEWID())
 FROM (SELECT *,ROW_NUMBER() OVER (ORDER BY Last_User)rnum FROM [Employees])a
WHERE a.rnum = @counter

SET @counter = @counter + 1

END

【讨论】:

    【解决方案2】:

    你可以试试这个方法:

    declare  @Employees table (last_user nvarchar(100))
    insert @Employees values('a')
    insert @Employees values('b')
    insert @Employees values('c')
    
    declare @temp table(name nvarchar(100))
    insert into @temp values('John')
    insert into @temp values('Tim')
    insert into @temp values('Jane')
    insert into @temp values('Jack')
    insert into @temp values('Steve')
    insert into @temp values('Ann')
    
    update @Employees set Last_User = 
    
    (select top 1 name from 
        @temp as names order by newid())
    
    select * from @Employees
    

    【讨论】:

    • 谢谢,但我有点困惑。我的表名在哪里?什么是a、b、c?
    • 嗨 SJJohnson,我使用的是临时表 [@Employees] 而不是 [Employees] 表,因为我只是想展示我们如何解决这个任务。您可以通过您的表简单地重新印上 [@Employees]。关于 'a','b','c' 是样本数据。
    • 我尝试了这两个建议。 prenesh u 为每一行提供了随机值。这个解决方案(由 Edward N)没有。相反,它为所有行提供了相同的值。我的算法情况略有不同,所以我不能说这是否是问题所在,但是这使用了一个更新,我认为这是一个列,但 prenesh 的算法实际上是单独处理每一行。
    猜你喜欢
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2016-09-04
    • 2014-11-10
    • 1970-01-01
    相关资源
    最近更新 更多