2015-07-13 55 views
1

在Microsoft SQL Server 2008 R2中,我有一些数据存储在表中,我希望脚本能够创建数据的精确副本,并且只使用不同的GUID(uniqueidentifiers)。挑战在于,其他表中的数据也依赖于主表。这些数据也应该被复制并参考新条目。使用新ID生成脚本(也用于依赖关系)

结构看起来像这样:

表形式:

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自动产生这样一种脚本管理工作室? 在“生成脚本”向导中,我只能使用现有主键生成脚本。

+0

如果我的答案解决了您的问题,最好将它勾选为已接受。谢谢 – Shnugo

回答

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