2014-10-08 12 views
0

假設我的表如下:SQL - 加入ID的所有行

id | name | country 
-------------------- 
    | John | USA 
    | Mary | USA 
    | Mike | USA 

有人能幫助我,可以添加ID的所有名的腳本?

感謝

+0

最簡單的選項更改爲使用光標和更新的每一行。 – 2014-10-08 06:30:26

+0

你從哪裏獲得ID?它是隨機的還是自動遞增的? – 2014-10-08 08:12:53

+0

@PareshJadhav雖然遊標可能*看起來是一個簡單的解決方案,它不能很好地擴展到大型表格。數據庫通常不能很好地處理循環,並且像答案中提出的基於集合的操作在非平凡的表格大小上執行*更好。 – alroc 2014-10-08 11:18:13

回答

0

試試這個

update table set a.id=b.newid from table a,(select row_number() over (order by (select null)) newid,name from #temp) b 

使訂貨一樣需要

1
-- Create a temporary table for the example. 
CREATE TABLE #People(Id int, Name nvarchar(10), Country nvarchar(10)) 

-- Insert data, leaving the Id column NULL. 
INSERT INTO #People(Name, Country) SELECT 
    'John', 'USA' UNION ALL SELECT 
    'Mary', 'USA' UNION ALL SELECT 
    'Mike', 'USA'; 

-- 1. Use Row_Number() to generate an Id. 
-- 2. Wrap the query in a common table expression (CTE), which is like an inline view. 
-- 3. If the CTE references a single table, we can update the CTE to affect the underlying table. 
WITH PeopleCte AS (
    SELECT 
     Id, 
     Row_Number() OVER (ORDER BY (SELECT NULL)) AS NewId 
    FROM 
     #People  
) 
UPDATE PeopleCte SET Id = NewId 

SELECT * FROM #People 

DROP TABLE #People 
+0

基表是否爲人員?並且不應該是更新後從基表中選擇? – 2014-10-08 06:32:47

+0

我已更新評論以澄清。人們(現在是PeopleCte)是一個共同的表格表達。您可以通過這種方式生成ID並在單個查詢中執行更新。 #sqlservermagic – 2014-10-08 08:16:56