2014-03-05 47 views
3

我想更新表中的50行到當前日期。 我知道如何選擇50個隨機結果,但我不知道如何更新它們。更新隨機頂部50行

這就是我對選擇代碼:

SELECT TOP 50[ID] 
     ,[Message] 
     ,[Date] 
     ,[Type] 
     ,[Username] 
FROM [database].[dbo].[dbTable] 
ORDER BY NEWID() 

如果我是正確的,這將獲得50個隨機行。

首先我剛剛更新了前50個,但我想從我的數據庫中獲得一些隨機值。

update top(50) dbTable 
set date=getdate() 

我不想搞亂數據庫,因爲我今天沒有訪問備份的權限。

如果有什麼不清楚的地方,請問我!

+1

由於表本身*不*命令,你的'更新頂(50)'查詢更新一個未定義的組50行。它沒有更新「第一」50行,因爲沒有這樣的事情。 –

+0

我知道它看起來很奇怪,但它在我的情況下工作,但不是我想要的方式:P – MCollard

回答

1

試試這個

UPDATE [database].[dbo].[dbTable] Set [Date] = GetDate() where [ID] IN 
(
    SELECT TOP 50 [ID] FROM [database].[dbo].[dbTable] ORDER BY NEWID() 
) 

或者其他

WITH q AS 
     (
     SELECT TOP 50[ID] 
       ,[Message] 
       ,[Date] 
       ,[Type] 
       ,[Username] 
     FROM [database].[dbo].[dbTable] 
     ORDER BY NEWID() 
     ) 
UPDATE q 
SET  [Date] = GetDate() 
1

嘗試這樣的:

update [dbo].[dbTable] set date=getdate() where Id in 
(
    select top 50 id from dbo.dbTable order by NEWID() 
) 
1

單獨TOP 50是不會讓你隨意行。有一種方法可以在sql-server中獲得隨機行。您可以將其與UPDATE查詢結合使用。

隨機行:

SELECT TOP 50 ID FROM [database].[dbo].[dbTable] ORDER BY NEWID(); 

應用於UPDATE查詢:

UPDATE [database].[dbo].[dbTable] 
SET Date = GETDATE() 
WHERE ID IN(SELECT TOP 50 ID FROM [database].[dbo].[dbTable] ORDER BY NEWID());