2015-07-13 42 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