2016-09-16 28 views
1

我想更新列/表中的記錄。我想只在一列中使用SHUFFLE/SCRAMBLE。所有其他列將保持不變。僅在特定列內置亂數據,其他列不變

下面是一個例子

表名:Scrambtable

 Title Firstname Lastname  Telephone other columns... 
1 Mr  Adam   Smith  001 
2 Mrs Angela      002 
3 Mr  Bill   Mowny  003 
4 Miss Dame      004 
5 Mr  Boya   Mala 

我很感興趣,將其轉化爲按照下面

 Title Firstname Lastname  Telephone other columns... 
1 Mr  Adam   Mala  001 
2 Mrs Angela      002 
3 Mr  Bill      003 
4 Miss Dame   Smith  004 
5 Mr  Boya   Towny 

我試圖用腳本below..it似乎僅在姓氏列中刷新600個姓氏中的一個2姓氏。

update t1 
set t1.lastname=b.lastname 
from Scrambtable t1 
cross apply 
(select top 1 t2.lastname 
from 
Scrambtable t2 
where 
t1.lastname<>t2.lastname 
order by newid() 
)b 

回答

2

這裏的一個策略是使用一個CTE,它添加一個以隨機順序分配的行號。然後將CTE加入自己的隨機行號並指定姓氏。

WITH CTE1 AS 
(
    SELECT *, 
      ROW_NUMBER() OVER (ORDER BY NEWID()) AS ROW 
    FROM Scrambtable 
), 
CTE2 AS 
(
    SELECT *, 
      ROW_NUMBER() OVER (ORDER BY NEWID()) AS ROW 
    FROM Scrambtable 
) 

UPDATE t1 
SET t1.Lastname = t2.Lastname 
FROM CTE1 t1 
INNER JOIN CTE2 t2 
    ON t1.ROW = t2.ROW 
+0

我得到錯誤語法錯誤';'附近。當我刪除;在WITH的開頭,我收到錯誤消息156,級別15,狀態1,行42 關鍵字'WITH'附近的語法不正確。 Msg 319,Level 15,State 1,Line 42 關鍵字'with'附近的語法不正確。如果此語句是公用表表達式,xmlnamespaces子句或變更跟蹤上下文子句,則前面的語句必須以分號結尾。 – optimisteve

+0

@optimisteve我想我修復了語法錯誤,請再試一次。 –

+0

再次感謝......剛剛執行了已更改的腳本..這次是錯誤消息208,級別16,狀態1,行61 無效的對象名稱'CTE'。 – optimisteve

相關問題