1

我有这样的桌子

主表

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

子表

 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

我想为 userId=1 选择 MainTable 和 ChildTable 中的所有记录,然后将它们再次插入 MainTable/ChildTable 但 UserId=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

我怎样才能做到这一点?谢谢你

4

1 回答 1

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在这里

于 2013-10-27T05:01:45.137 回答