我想你應該有在複製一個很好看,因爲很多答案都表示,特別是在高TPS環境或你想這對很多表。但是,我將提供一些關於如何在使用鏈接服務器,同義詞和檢查約束的系統中達到您的既定目標的代碼。
我想抽象出這個共同數據到一個單一的數據庫,但還是讓其他數據庫這些表連接,甚至有鍵強制約束等
你可以設置一個視圖或您的數據庫中的synonym到鏈接服務器(或其他本地數據庫)中的公用表。無論如何,如果視圖只是select * from table
,我更喜歡同義詞。
如果您有權限,則表同義詞將允許您在遠程項目上運行DML。
儘管如此,你不能爲你的視圖或同義詞使用外鍵,但是我們可以用一個檢查約束來完成類似的事情。
讓我們來看看一些代碼:
create synonym MyCentralTable for MyLinkedServer.MyCentralDB.dbo.MyCentralTable
go
create function dbo.MyLocalTableFkConstraint (
@PK int
)
returns bit
as begin
declare @retVal bit
select @retVal = case when exists (
select null from MyCentralTable where PK = @PK
) then 1 else 0 end
return @retVal
end
go
create table MyLocalTable (
FK int check (dbo.MyLocalTableFKConstraint(FK) = 1)
)
go
-- Will fail: -1 not in MyLinkedServer.MyRemoteDatabase.dbo.MyCentralTable
insert into MyLocalTable select -1
-- Will succeed: RI on a remote table w/o triggers
insert into MyLocalTable select FK from MyCentralTable
當然,需要注意的是,如果你在中央表中刪除引用的記錄,你不會得到一個錯誤是很重要的。
您打算如何使用這些信息?您可以創建一個數據庫來保存其他數據庫的公共信息。使用mySQL ETL工具將數據從應用程序數據庫位置移動到一個集中式數據庫。我認爲Pentaho水壺應該允許你對你的應用數據庫的影響很小。 – Zane 2013-05-06 19:35:05
對不起,我誤讀了你沒有使用mySQL的標籤。這使事情變得更容易。 – Zane 2013-05-06 19:43:44
您對使用SSIS有多熟悉? – Zane 2013-05-06 19:44:04