2011-07-15 26 views
0

我想嘗試更新使用同一個表中隨機值的表,但原始表鴕鳥政策有身份跟隨或任何其他數列的表...更新使用CTE和NEWID()

WITH cteTable1 AS (
SELECT 
    ROW_NUMBER() OVER (ORDER BY NEWID()) AS n, 
    ENDE_NO_Address 
FROM TableX 
) 
UPDATE TableX SET ENDE_NO_Address = (
    SELECT ENDE_NO_Address 
    FROM cteTable1 
    WHERE cteTable1.n = This is the problem... 

TNKS的幫助

+0

和!?!?!!?!你有什麼問題??它是否)不起作用? b)給你一個錯誤(如果是這樣的話:**什麼**錯誤?),或c)不給隨機值 –

+1

所以表中沒有主鍵你說? – gbn

+0

@gbn:所以它*不是真的*表然後...... :-) –

回答

0
declare @T table(Col1 varchar(10)) 

insert into @T values (1),(2),(3),(4),(5) 

;with cte as 
(
    select *, 
     row_number() over(order by newid()) as rn1, 
     row_number() over(order by Col1) as rn2 
    from @T 
) 

update C1 set 
    Col1 = C2.Col1 
from cte as C1 
    inner join cte as C2 
    on C1.rn1 = C2.rn2 

編輯:

WITH cte AS (
SELECT 
    ROW_NUMBER() OVER (ORDER BY NEWID()) AS n1, 
    ROW_NUMBER() OVER (ORDER BY (select 1)) AS n2, 
    ENDE_NO_Address 
FROM TableX 
) 
update C1 set 
    ENDE_NO_Address = C2.ENDE_NO_Address 
from cte as C1 
    inner join cte as C2 
    on C1.n1 = C2.n2 
+0

這最後一個把所有的列與空,但我改變了選擇1 ENDE_NO_ADDRESS和工作正常... TNKS很多 –

+0

@Ricardo-奇怪不在我的測試。第一個使用表變量是否適合你?除非在某個地方有錯別字,否則它們是相同的。 –

+0

嗨,第二個工作很好 –

1

猜測...

UPDATE TableX 
SET ENDE_NO_Address = (
    SELECT TOP 1 ENDE_NO_Address FROM TableX ORDER BY NEWID() 
    ) 
+0

結果會有點不同,相比我發佈。也許這是更正確的,使用隨機值。我的版本不重用地址。所以我想我的版本實際上是對數據進行加擾,而不是像OP那樣使用隨機值。 –