2013-10-26 50 views
1

我的表像這樣插入新記錄和更新的外鍵

MainTable

Id FolderName Description  UserId 
1 Folder1  Description1  1 
2 Folder1  Description2  1 
3 Folder1  Desctiption3  1 
4 Folder2  Description1  2 
5 Folder2  Description2  2 

ChildTable

Id FolderId  Title  UserId imageName 
1  1   AA   1  AAA 
2  1   BB   1  BBB 
3  2   CC   1  CCC 
4  3   DD   1  DDD 
5  4   EE   2  EEE 

我想選擇在MainTable和ChildTable對於用戶id的所有記錄= 1將它們插入再度陷入MainTable/ChildTable但用戶id = 5,所以FolderId新的記錄應該被更新,所以結果應該是這樣的:

Id FolderName Description  UserId 
1 Folder1  Description1  1 
2 Folder1  Description2  1 
3 Folder1  Desctiption3  1 
4 Folder2  Description1  2 
5 Folder2  Description2  2 
6 Folder1  Description1  5 
7 Folder1  Description2  5 
8 Folder1  Desctiption3  5 


Id FolderId  Title  UserId imageName 
1  1   AA   1  AAA 
2  1   BB   1  BBB 
3  2   CC   1  CCC 
4  3   DD   1  DDD 
5  4   EE   2  EEE 
6  6   AA   5  AAA 
7  6   BB   5  BBB 
8  7   CC   5  CCC 
9  8   DD   5  DDD 

我該怎麼辦呢? 謝謝

回答

0

試試這個:

DECLARE @t table (OldFolderId int, NewFolderId int); 

MERGE MainTable AS m 
USING (SELECT Id, FolderName, Description 
     FROM MainTable AS m 
     WHERE UserId = 1) AS src 
ON 1=2 
WHEN NOT MATCHED THEN 
    INSERT (FolderName, Description, UserId) 
    VALUES (src.FolderName, src.Description, 5) 
OUTPUT src.Id AS OldFolderId, inserted.Id AS NewFolderId 
INTO @t; 

INSERT ChildTable (FolderId, Title, UserId, imageName) 

SELECT t.NewFolderId, Title, 5, imageName 
FROM ChildTable c 
INNER JOIN @t t ON t.OldFolderId = c.FolderID 
WHERE c.UserId = 1; 

SQLFiddle here