遷移類別我想這樣做使用SQL OUTPUT
DECLARE @idTable TABLE
(
hierakiId INT,
katId INT
);
DECLARE @id int
SET @id = (SELECT MIN([ID]) FROM [Hieraki] WHERE Navn = 'Sagsskabeloner')
INSERT INTO HierakiMedlem(Navn, HierakiID)
OUTPUT INSERTED.ID, s.ID INTO @idTable
SELECT s.Navn, @id, s.ID FROM SagSkabelonKategori s
UPDATE s SET s.HierakiMedlem = @idTable.hierakiId
FROM SagSkabelon s INNER JOIN @idTable
ON s.SagSkabelonKategoriID = @idTable.katId
導致@idTable映射,映射老每個類別的新身份,以便需要時我可以改變引用。很明顯,這會導致錯誤(第3行),因爲SELECT導致的列多於INSERT INTO使用的列。
有關最乾淨的方法的任何建議嗎?
我的SQL Server 2005。
/編輯
現在W¯¯上。完整的源代碼。
我們正在從半平面非嵌套類別排序切換到基於層次結構的類別排序。所有類別都將作爲新層次中的根級別節點進行復制,並且每個類別的前一個成員必須具有引用新創建的根節點的新字段集合。
我想做什麼; 1.將所有類別複製到層次表中,將它們的父級(HierakiID)設置爲相同的值。
更新所有引用類別的列,以便他們現在(也)引用層次結構。
刪除引用類
刪除類別
棘手的問題對我來說是獲得類別ID和層次結構ID之間的映射。
/編輯
您可以使用'merge'而不是'insert'。看這裏http://stackoverflow.com/questions/5365629/using-merge-output-to-get-mapping-between-source-id-and-target-id和這裏http://stackoverflow.com/questions/6174355/how-to-copy-tables-avoid-cursors-in-sql/6174409#6174409 – 2011-06-06 13:14:44
可悲的是沒有可能性。忘了提及我在SQL Server 2005上。 – hhravn 2011-06-06 13:53:22