TSQL foreign keys on views?

后端 未结 11 981
臣服心动
臣服心动 2021-01-01 13:51

I have a SQL-Server 2008 database and a schema which uses foreign key constraints to enforce referential integrity. Works as intended. Now the user creates views on the orig

11条回答
  •  小鲜肉
    小鲜肉 (楼主)
    2021-01-01 14:20

    Using Rob Farley's schema:

    CREATE TABLE dbo.testtable(
    id int IDENTITY(1,1) PRIMARY KEY,
    val int NOT NULL); 
    go
    INSERT dbo.testtable(val)
    VALUES(20),(30),(40),(50),(60),(70);
    go 
    CREATE TABLE dbo.secondtable(
    id int NOT NULL,
    CONSTRAINT FK_SecondTable FOREIGN KEY(id) REFERENCES dbo.TestTable(id)); 
    go
    
    CREATE TABLE z(n tinyint PRIMARY KEY);
    INSERT z(n)
    VALUES(0),(1);
    go
    CREATE VIEW dbo.SecondTableCheck WITH SCHEMABINDING AS
    SELECT 1 n
    FROM dbo.TestTable AS t JOIN dbo.SecondTable AS s ON t.Id = s.Id
    CROSS JOIN dbo.z
    WHERE t.Val < 50;
    go
    CREATE UNIQUE CLUSTERED INDEX NoSmallIds ON dbo.SecondTableCheck(n);
    go
    

    I had to create a tiny helper table (dbo.z) in order to make this work, because indexed views cannot have self joins, outer joins, subqueries, or derived tables (and TVCs count as derived tables).

提交回复
热议问题