我有一張表,我需要將記錄從後面複製到它自己。作爲其中的一部分,我希望使用OUTPUT子句將新行捕獲到表變量中,以便我可以在同一個進程中對行執行其他操作。我希望每行包含其新密鑰以及從複製的密鑰。這裏是一個人爲的例子:在SQL Server 2005中使用OUTPUT INTO複製錶行
INSERT
MyTable (myText1, myText2) -- myId is an IDENTITY column
OUTPUT
Inserted.myId,
Inserted.myText1,
Inserted.myText2
INTO
-- How do I get previousId into this table variable AND the newly inserted ID?
@MyTable
SELECT
-- MyTable.myId AS previousId,
MyTable.myText1,
MyTable.myText2
FROM
MyTable
WHERE
...
SQL Server的叫聲,如果列在INSERT數不從SELECT語句中的列數相匹配。因此,如果我向MyTable添加了一列,我可以看到這可能會如何工作,但這不是一個選項。以前,這是通過一個導致性能瓶頸的遊標實現的 - 我故意試圖避免這種情況。
如何複製這些記錄,同時保留複製行的關鍵點以達到最高性能?
正如你所提到的,最簡單的方法是使用額外的列來存放舊的ID。添加列不是一個選項的原因是什麼? – dougajmcdonald 2012-03-05 16:24:23
是的,我認爲你是對的,但專欄之外的這個複製操作是沒有意義的 - 我想我沒有完全反對它,如果沒有別的東西出來。 – 2012-03-05 16:28:41
這不像你說的那樣理想,因爲它不是真正的數據的一部分。我想你可以添加列作爲過程的一部分,然後將其刪除,但似乎有點沉重。我試圖讓它可以爲空,並確保在使用後爲空間節省空列(假設您不需要在過程外保留舊的ID值) – dougajmcdonald 2012-03-05 17:00:02