在Microsoft SQL Server 2008 R2中,我将一些数据存储在一个表中,我想要一个脚本,该脚本只使用不同的guids(uniqueidentifier)创建数据的精确副本。挑战在于,其他表中的数据也依赖于主表。还应复制这些数据并将其引用到新条目中。
结构如下:
表格形式:
Guid Name
335AC2DD-C874-45E4-90AA-194882DB7C12 Testform
表格字段:
Guid FormGuid Name
9640CA20-2CE6-4BFB-929C-8A92D313DEB2 335AC2DD-C874-45E4-90AA-194882DB7C12 Testfield
现在我想复制两个表的数据,所有条目都应该获得一个新的主键。表字段中 FormGuid 的值也应该引用新的id。
结果应该是这样的:
表格形式:
Guid Name
335AC2DD-C874-45E4-90AA-194882DB7C12 Testform
B649C385-278B-4163-882C-E5C3B6A96F2F Testform
表格字段:
Guid FormGuid Name
9640CA20-2CE6-4BFB-929C-8A92D313DEB2 335AC2DD-C874-45E4-90AA-194882DB7C12 Testfield
C7C65EEE-E02B-49F5-99CD-F0042CC15C4F B649C385-278B-4163-882C-E5C3B6A96F2F Testfield
有没有办法在SQL Server Management Studio中自动生成这种脚本? 在" Generate Scripts"向导我只能用现有的主键生成脚本。
答案 0 :(得分:1)
这样的东西?我使用表值变量将列“添加”到原始表单表。
DECLARE @Form1 UNIQUEIDENTIFIER=NEWID();
DECLARE @Form2 UNIQUEIDENTIFIER=NEWID();
DECLARE @tblForms TABLE(id UNIQUEIDENTIFIER,FormName VARCHAR(100));
INSERT INTO @tblForms VALUES(@Form1,'test1'),(@Form2,'test2');
DECLARE @tblFields TABLE(id UNIQUEIDENTIFIER,FormId UNIQUEIDENTIFIER,FieldName VARCHAR(100));
INSERT INTO @tblFields VALUES(NEWID(),@Form1,'test1.1'),(NEWID(),@Form1,'test1.2'),(NEWID(),@Form1,'test1.3')
,(NEWID(),@Form2,'test2.1'),(NEWID(),@Form2,'test2.2'),(NEWID(),@Form2,'test2.3');
--These are "your original IDs"
SELECT frms.id,frms.FormName
,flds.id,flds.FieldName
FROM @tblForms AS frms
INNER JOIN @tblFields AS flds ON frms.id=flds.FormId ;
--Copy forms into a new table with an extra column
DECLARE @tblFormsNeu TABLE(id UNIQUEIDENTIFIER,FormName VARCHAR(100),myNewID UNIQUEIDENTIFIER);
INSERT INTO @tblFormsNeu
SELECT id,FormName,NEWID() FROM @tblForms;
SELECT frms.myNewID, frms.FormName
,NEWID() AS myNewFieldID,flds.FieldName
FROM @tblFormsNeu AS frms
INNER JOIN @tblFields AS flds ON frms.id=flds.FormId