UNIONed View的外键

时间:2013-07-23 22:21:34

标签: sql-server tsql sql-server-2012

我的观点如下:

CREATE view   reference.Test WITH SCHEMABINDING  as

    SELECT        reference.HighlevelTestId as TestId, Name, IsActive,
                  cast(1 as bit) as IsHighLevelTest 
    FROM          reference.HighlevelTest

    UNION ALL

    SELECT        LowLevelTestId  as TestId, Name, IsActive, 
                  cast(0 as bit) as IsHighLevelTest  
    FROM          reference.LowLevelTest

GO

注意:保证HighLevelTestId和LowLevelTestId永远不会有相同的值(没有冲突)。

我有另一张表如下:

CREATE TABLE [Reference].[TestAddition](
    [TestId] [BigInt] NOT NULL,
    [OtherStuff] [bit] NOT NULL,
    .... 
) 

我真的想将我的TestAddition表FK放到TestId列上的Test视图中(为了参考完整性和OData的易用性)。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

外键无法应用于视图。从这个角度获取它:您不能将引用完整性应用于由SELECT语句返回的结果,因为它们不是永久存储的,它们只是查询的非持久输出。

要管理参照完整性,请在永久存储数据时将外键或其他此类约束应用于数据 - 例如在表IsHighLevelTestIsLowLevelTest中。或者将UNION永久物的结果存储在表格中。还有更多方法。