我有值SQL Server 2008的更新表和開關值查詢優化
ID Son Father
----------- ---------- ----------
1 Mark Gerard
2 Gerard Ivan
3 Leo Samuel
4 Samuel Johan
5 Ivan Carles
我需要改變的表像這樣的表:
ID Son Father
----------- ---------- ----------
1 Mark Carles
2 Gerard Carles
3 Leo Johan
4 Samuel Johan
5 Ivan Carles
的目標是找到一個主要'Father'
和用此值更新所有'Son'
記錄。主要'Father'
可以不同。
我的代碼是未來:
DECLARE @CNT INT
DECLARE @CH_1 NVARCHAR(10)
DECLARE @CH_2 NVARCHAR(10)
CREATE TABLE #PPL (ID INT, Son NVARCHAR(10), Father NVARCHAR(10))
INSERT INTO #PPL VALUES (1, 'Mark', 'Gerard')
INSERT INTO #PPL VALUES (2, 'Gerard', 'Ivan')
INSERT INTO #PPL VALUES (3, 'Leo', 'Samuel')
INSERT INTO #PPL VALUES (4, 'Samuel', 'Johan')
INSERT INTO #PPL VALUES (5, 'Ivan', 'Carles')
SET @I = 1
SET @CNT = (SELECT COUNT(ID) FROM #PPL)
WHILE @I <= @CNT
BEGIN
SET @J = 1
WHILE @J <= @CNT
BEGIN
SET @CH_1 = (SELECT Son FROM #PPL WHERE ID = @J)
SET @CH_2 = (SELECT Father FROM #PPL WHERE ID = @J)
UPDATE #PPL SET Father = @CH_2 WHERE Father = @CH_1
SET @J = @J + 1
END;
SET @I = @I + 1
END;
SELECT * FROM #PPL
DROP TABLE #PPL
此代碼工作正確的,但對於低數量的記錄。這個代碼如何優化?
謝謝!
請勿使用LOOP。改用遞歸CTE。 – xQbert
作爲一個例子:http://stackoverflow.com/questions/14274942/sql-server-cte-and-recursion-example – xQbert
@xQbert:你怎麼定義這裏的根節點 – TheGameiswar