2014-02-14 158 views
-1

我們在MS SQL Server 2005(實際上是開發數據庫)中有一個數據庫,它託管着許多保存應用程序工作空間的關係表。使用這個應用程序用戶可以定義許多新的數據結構,每個數據結構都存儲爲不同表中的行,並且類型位的名爲'finalized'的列表示將該組數據複製到另一個數據庫(其作用爲僅具有最終數據的發佈數據庫)與開發數據庫完全相同。MS SQL Server複製數據庫之間的關係數據

當用戶完成他的工作時,他啓動了一組數據(其最終化字段尚未設置爲1)的同步過程,並在執行了一些驗證規則後,如果一切似乎都OK,我們將複製此設置爲釋放數據庫並在開發數據庫中將相關表的最終字段標記爲1。有沒有一個簡單的機制,我們可以使用,而不是從第一個數據庫中選擇數據並以編程方式將其插入到目標?有太多的表格可供選擇,這些表格實際上保存了關於id值的關係數據。

發佈數據庫大多數似乎有來自源數據庫的條件爲'where finalized = 1'的表的視圖,但是當用戶開始同步數據集,而最終化字段仍然爲0時,我們還應該添加一個集(如果驗證過程確定)。

在此先感謝

回答

0

SQL腳本(存儲過程),以促進這些新的表項很可能在這種情況下你最好的選擇。

一些替代將是:

插入dev的身份進入生產表 - 這是有風險的,如果數據可以通過任何其他方法來插入。同樣值得考慮的是,啓用身份插入時發生的表鎖定 - 您的最終用戶在運行時可能無法查詢生產表。這可以用語法來完成:

SET IDENTITY_INSERT [myTABLE] ON 
INSERT INTO PROD.DBO.myTABLE (COL1,COL2,COL3) 
SELECT COL1,COL2,COL3 FROM DEV.DBO.myTABLE WHERE... 
SET IDENTITY_INSERT [myTABLE] OFF 

這是關於此的KB。 http://technet.microsoft.com/en-us/library/ms188059.aspx

另一種選擇是過濾從dev到prod的複製 - 只有在沒有其他方法將數據插入到生產環境中時,纔會起作用,並且如果dev條目可以在更改後更改他們被標記爲批准 - 因爲這些更改會立即複製到生產環境中,可能會影響最終用戶。在這種情況下,您的生產表格不可修改。

這裏是過濾的複製一個KB:http://technet.microsoft.com/en-us/library/ms146925(v=sql.105).aspx

理想的情況下,生產環境是從開發環境完全隔離 - 這意味着我剛剛提出的方案將不會被使用 - 但我將他們當作FYIs 。這就是說,假設你的表模式是相同的,你可以看看在生產中添加一個新的標識列,從而允許你將dev ID插入其中。

即:

dev.dbo.myTable 
id int identity(1,1) primary key, 
val1 int, 
val2 int, 
flag bit 

prod.dbo.myTable 
newid int identity(1,1) primary key, -- new column in prod 
id int, 
val1 int, 
val2 int, 
flag bit 

您將需要添加一個新的身份,以每條生產表,所以每一個生產表將持有機號......和您的前端代碼保持不變。如果模式更改是一個選項,這將是我的方法。

這將允許您從dev到prod進行直接插入,保持dev ID完好無損,並且還提供了一種將prod與dev同時匹配的方法。

希望這會有所幫助。