2013-04-11 36 views
0

場景:複製數據庫中的數據,並沒有標識插入的外鍵

我有一組測試數據,需要每天被部署到我們構建服務器(我們構建服務器數據庫第一次與當前實時數據庫覆蓋,並且已經刪除了所有超過一個月的數據)。

此測試數據在其中需要保留的外鍵引用。

我不能簡單地打開IDENTITY_INSERT,因爲主鍵可能與已經在數據庫中的數據衝突(因爲我們不是從空白數據庫開始的)。

測試數據需要能夠相當有規律地重新生成,所以雖然要經過部署腳本並將id列填充爲奇怪的東西(例如負數),然後更改相關的外鍵每次我們重新生成數據時,列都是相同的ID並不會讓我興奮不已。

理想情況下,我想知道是否有一個工具,它可以掃描數據庫,拿起外鍵約束,並相應產生的插入腳本,像:

INSERT INTO MyTable VALUES('TEST','TEST'); 

DECLARE @Id INT; 
SET @Id = (SELECT @@IDENTITY) 

INSERT INTO MyRelatedTable VALUES(@Id,'TEST') 
+1

你想在這裏做什麼樣的測試?我會認爲對於一個測試系統,你總是希望用一個給定的,已知的一組數據加載它 - 你的測試的預期結果將如何保持新鮮? – 2013-04-11 11:55:06

+0

爲了確保當前的實時數據不會導致任何問題,我們的測試還會掃描這些數據(這就是爲什麼我們只能在構建服務器上清除超過一個月的數據)。正如你所說,加載已知數據的想法是,我們針對該數據運行的測試將能夠斷言計數和值是否正確。 – Ben 2013-04-11 12:06:37

回答

0

這聽起來像你想研究一個ETL流程,以應對id的變化。在使用SQL Server時,您可以查看OUTPUT clause - 使用它可以構建一些臨時表,這些臨時表可以將每個主鍵的「舊」ID映射到「新」ID,以便在遷移「孩子「表。