我想你应该有在复制一个很好看,因为很多答案都表示,特别是在高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