[英]SQL Foreign Key in Another Database
我目前正在工作中创建一个数据库,该数据库实质上是另一个数据库的子级。 当我们的客户获得我们的软件时,他们就会获得一个数据库,称其为MasterBase。 该数据库包含两个不同的较小数据库的架构,将它们称为MasterC和MasterF。
我的工作是采用与MasterF相关的所有架构,并将其放入自己的数据库中。 问题是MasterC中有很多对表和视图的引用。 要解决此问题,我将添加一个将MasterF与MasterC配对的属性,以便在我的.NET解决方案中,我应该能够执行以下操作:
表tableName ....(在MasterF中创建表)引用.... MasterC.dbo.tableC(MasterC中的表)
但是,在SQL中这会引发错误:MSG 1763跨数据库外键引用不受支持。
我读过最常见的解决方法是添加一个触发器,但是看到它不是那么安全,并且有很多这样的实例,我想知道是否还有另一种方法,也许是存储过程或类似的东西。
如果触发器确实是最好的/唯一的方法,并且我必须向每个有此问题的表添加一个触发器,那么我将如何编写该触发器,我知道一点点SQL,但是很难精通。
请帮忙!
根据您对单个构建的最后评论,我想我想说的是,客户何时“需要”两个客户的门槛是……他们两个都“需要”的时间。 对于MasterC中不引用MasterF的表,对于要分类为不需要两者的客户端,这听起来几乎就像您需要第三个架构。
顺便说一句-这都是关于参照完整性的,是吗? 除了“关系”,您还可以采用其他策略来实现该目标。
编辑
CREATE TRIGGER myTrigger ON myTable
AFTER INSERT
AS
IF NOT EXISTS (SELECT * FROM OtherDatabase.otherschema.othertable F
JOIN inserted AS i
ON F.KeyYouAreLookingFor = i.KeyYouHave)
BEGIN
RAISERROR ('Lookup Value Not Found -- Insert Failed', 16, 1);
ROLLBACK TRANSACTION;
RETURN
END;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.