无法通过数据库引用跨数据库创建表约束

时间:2015-01-06 17:45:14

标签: database visual-studio-2013 sql-server-data-tools

在Visual Studio 2013中,我在同一个解决方案(DatabaseA和DatabaseB)中设置了两个数据库项目,DatabaseA具有DatabaseB的“数据库引用”。

Database solution

这一切看起来都很棒,所以我在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(预览版)中测试了这个结果。

1 个答案:

答案 0 :(得分:3)

如果项目部署到同一个数据库:

添加引用时,请在“数据库位置”下选择“相同数据库”。

当你这样做时,你不需要使用数据库名称变量,它应该可以正常工作。

部署时,您需要确保包含复合对象(如果它不存在)或者您选择删除所有对象。

如果你实际上有两个不同的数据库,那么sql不支持跨数据库外键,你需要实现一个触发器(yuck)来支持它