2016-02-01 159 views
2

我嘗試以下操作:更新SQL Server表與隨機名稱

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()) 

但保留所有行得到相同的名稱。我怎樣才能讓它變化?

注意:名稱是在查詢中輸入的,而不是來自其他表格。

感謝

+0

你做'update Employees ='隨機選取的名字'這意味着所有的員工都會得到那個隨機的名字。 – Andrew

+0

可能重複的[如何用另一個表中的隨機行更新表的每一行](http://stackoverflow.com/questions/29760225/how-to-update-each-row-of-a-table-與隨機行從另一個表) – Andrew

回答

2

您要更新整個列而不是更新的每一行,因此,這是如何產生更新爲所有行的第一個值,你可以通過使用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 
1

你可以試試這個方法:

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 
+0

謝謝,但我有點困惑。我的表名在哪裏?什麼是a,b,c? –

+0

嗨SJJohnson,我正在使用臨時表[@Employees]而不是[Employees]表,因爲我只是想說明我們如何解決這個任務。你可以通過你的表簡單地replate [@Employees]。關於'a','b','c'是樣本數據。 –

+0

我嘗試了兩個建議。 prenesh給你的每個行賦予了隨機值。這個解決方案(Edward N)沒有。相反,它爲所有行賦予相同的值。我的算法情況稍有不同,所以我不能說這是否是問題,但是它使用UPDATE,我認爲這是一個列,但prenesh的算法實際上是單獨處理每一行。 –