2012-02-27 15 views
1

如何用20個隨機選擇的值更新10000條記錄?如何用20個隨機選擇的值更新10000條記錄?

例如:在一張表中,我有像firstname,lastname,emailid這樣的字段,它有10000條記錄。我想用我測試的電子郵件ID列表更新emailid字段。

+1

你的意思是指出錯誤和冗餘更新20個行? – 2012-02-27 10:18:07

+0

不,更新所有10000個行,隨機選擇20個值 – Pradeep 2012-02-27 10:20:02

回答

1

下面是一個例子:

declare @EmailList table 
(
    EmailIndex int identity(1, 1) primary key, 
    EmailAddress nvarchar(100) 
) 

insert @EmailList (EmailAddress) 
    select '[email protected]' union all 
    select '[email protected]' union all 
    select '[email protected]' 
    -- other emails here... 

declare @emailListLength int 
select @emailListLength = count (*) from @EmailList 

update Users set Email = el.EmailAddress 
    from 
     (select CEILING(RAND(CONVERT(varbinary, newid())) * @emailListLength) as randomEmailIndex, * from Users) rnd 
      join @EmailList el on el.EmailIndex = rnd.randomEmailIndex 

CEILING(RAND(CONVERT(varbinary, newid()))表達會產生隨機數從1[email list length]然後我們加入了用戶表使用該隨機指標預定義的枚舉電子郵件列表。

+0

+1我喜歡你加入@EmailList的方式。我可能會嘗試row_number()OVER(ORDER BY校驗和(*))或類似的東西。 – eric 2012-02-27 10:42:32

5

感謝託梅克在原來的答案

UPDATE PersonalInformation 
SET EmailID = ABS(CAST(NEWID() AS BINARY(6)) % 20) 
+0

你測試過了嗎?這是錯誤的,select子查詢被優化並執行一次,所以EmialID將被填充相同的值。 – Tomek 2012-02-27 10:47:20

+0

@Tomek - 我添加了一個測試腳本,在我的電腦上,更新到測試列表中隨機選擇的值。 – 2012-02-27 10:52:59

+1

所以我們都學到了一些新東西,如果你試圖用常規表來替換表變量,它的行爲會有所不同。 – Tomek 2012-02-27 11:02:41