我想要一个包含引用另一个表的列的表(不引用另一个表中的列)。
我正在使用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
在此上下文中不允许使用子查询。只有标量表达式 是允许的。
是否有可能有这种约束?
答案 0 :(得分:0)
Information_schema.tables是一个视图,您无法引用外键中的视图。
答案 1 :(得分:0)
构建自己的允许值列表(user-def table)并引用它。更好的选择是存储可读的值,其中包含"为什么"你必须在其他一些表中查找数据,例如record type
。并查看有关多态数据结构的其他问题 - 在我看来,您正在构建类似的东西。
你应该注意FK引用系统表。这些表格不是您申请的一部分。