假設我的表如下:SQL - 加入ID的所有行
id | name | country
--------------------
| John | USA
| Mary | USA
| Mike | USA
有人能幫助我,可以添加ID的所有名的腳本?
感謝
假設我的表如下:SQL - 加入ID的所有行
id | name | country
--------------------
| John | USA
| Mary | USA
| Mike | USA
有人能幫助我,可以添加ID的所有名的腳本?
感謝
試試這個
update table set a.id=b.newid from table a,(select row_number() over (order by (select null)) newid,name from #temp) b
使訂貨一樣需要
-- 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
基表是否爲人員?並且不應該是更新後從基表中選擇? – 2014-10-08 06:32:47
我已更新評論以澄清。人們(現在是PeopleCte)是一個共同的表格表達。您可以通過這種方式生成ID並在單個查詢中執行更新。 #sqlservermagic – 2014-10-08 08:16:56
最簡單的選項更改爲使用光標和更新的每一行。 – 2014-10-08 06:30:26
你從哪裏獲得ID?它是隨機的還是自動遞增的? – 2014-10-08 08:12:53
@PareshJadhav雖然遊標可能*看起來是一個簡單的解決方案,它不能很好地擴展到大型表格。數據庫通常不能很好地處理循環,並且像答案中提出的基於集合的操作在非平凡的表格大小上執行*更好。 – alroc 2014-10-08 11:18:13