在Visual Studio 2013中,我在同一个解决方案(DatabaseA和DatabaseB)中设置了两个数据库项目,DatabaseA具有DatabaseB的“数据库引用”。
这一切看起来都很棒,所以我在DatabaseB中创建TableB,然后在DatabaseA中创建一个视图来获取TableB中的数据。
CREATE VIEW [dbo].[vDatabaseB]
AS SELECT Id FROM [$(DatabaseB)].dbo.TableB
完美无缺。我现在在DatabaseA中创建一个TableA,它将对TableB有一个外键约束。
CREATE TABLE [dbo].[TableA]
(
[Id] INT NOT NULL PRIMARY KEY,
[TableBID] INT NOT NULL
CONSTRAINT FK_TableA_TableBID FOREIGN KEY (TableBId) REFERENCES [$(DatabaseB)].dbo.TableB(Id) ON DELETE CASCADE,
不幸的是,这只是不构建:
Error SQL71501: Foreign Key: [dbo].[FK_TableA_TableBID] has an unresolved reference to Column [dbo].[TableB].[Id]. DatabaseA TableA.sql 5
如何让此表约束起作用?我也在Visual Studio 2015(预览版)中测试了这个结果。
答案 0 :(得分:3)
如果项目部署到同一个数据库:
添加引用时,请在“数据库位置”下选择“相同数据库”。
当你这样做时,你不需要使用数据库名称变量,它应该可以正常工作。
部署时,您需要确保包含复合对象(如果它不存在)或者您选择删除所有对象。
如果你实际上有两个不同的数据库,那么sql不支持跨数据库外键,你需要实现一个触发器(yuck)来支持它