我有以下代碼:如何保持插入到表的行與源SELECT子句之間的關係?
DECLARE @NewTenant INT = ...;
DECLARE @TemplateTenant INT = ...;
CREATE TABLE FooTable(FooID INT PRIMARY KEY IDENTITY(1,1), TenantID INT REFERENCES ..., SomeData XML)
INSERT INTO FooTable(TenantID, SomeData)
SELECT @NewTenant, SomeData FROM FooTable
WHERE TenantID = @TemplateTenant
ORDER BY FooID;
我需要填寫以下表格:
CREATE TABLE #FooTableOldNew(TemplateTenantFooID INT, NewTenantFooID INT);
我想通幾個方法可以做到這一點,但他們都似乎是unnecesary詳細,如:
SELECT Old.FooID OldFooID, New.FooID NewFooID
INTO #FooTableOldNew
FROM (SELECT FooID, ROW_NUMBER() OVER (ORDER BY FooID) as RowNumber FROM FooTable WHERE TenantID = @TemplateTenant) Old
INNER JOIN (SELECT FooID, ROW_NUMBER() OVER (ORDER BY FooID) as RowNumber FROM FooTable WHERE TenantID = @NewTenantID) New
ON Old.RowNumber = New.RowNumber
當粘貼相同的代碼時,至少有4行代碼和很大的錯誤風險。
說實話:我不明白你的問題...我的理解是,您希望根據您選爲「TemplateTenant」的舊線條創建新線條。將TemplateTenantID列放在FooTable(自引用)中並避免使用「OldNew-Table」可能是一個暗示。所有這些信息比寫入依賴表更容易查詢。 – Shnugo
您可以請解釋一下更多 – Moumit
@Shnugo:我不想將TemplateTenantID放置在〜20表中,只是爲了簡化一個很少使用的存儲過程。是的,可以在SP中添加列並在執行過程後將其刪除,但不是矯枉過正? – Ginden