将外键添加到information_schema.tables

时间:2016-02-12 10:11:16

标签: sql tsql sql-server-2008-r2 foreign-keys check-constraints

我想要一个包含引用另一个表的列的表(不引用另一个表中的列)。

我正在使用SQL Server 2008 R2

所以我有tblA,tblB和tblC。 tblA有一个varchar的“OtherTable”列。 我想要一个外键约束,它只允许值“tblA”,“tblB”或“tblC”作为此列中的值。

我用普通外键尝试了它

ALTER TABLE dbo.tblA
ADD FOREIGN KEY (OtherTable)
REFERENCES information_schema.tables(TABLE_NAME);

得到以下错误:

  

Msg 1767,Level 16,State 0,Line 1

     

外键'FK__tblA__Tabel__27CED166'引用无效表   'INFORMATION_SCHEMA.TABLES'。

     

Msg 1750,Level 16,State 0,Line 1

     

无法创建约束。查看以前的错误。

我也尝试使用Check Constraint

ALTER TABLE dbo.tblA
ADD CHECK (OtherTable IN (SELECT TABLE_NAME FROM information_schema.tables));

但这也给了我一个错误:

  

Msg 1046,Level 15,State 1,Line 6

     

在此上下文中不允许使用子查询。只有标量表达式   是允许的。

是否有可能有这种约束?

2 个答案:

答案 0 :(得分:0)

Information_schema.tables是一个视图,您无法引用外键中的视图。

答案 1 :(得分:0)

构建自己的允许值列表(user-def table)并引用它。更好的选择是存储可读的值,其中包含"为什么"你必须在其他一些表中查找数据,例如record type。并查看有关多态数据结构的其他问题 - 在我看来,您正在构建类似的东西。

你应该注意FK引用系统表。这些表格不是您申请的一部分。