【发布时间】:2016-02-12 10:11:16
【问题描述】:
我想要一个表,其中的列引用另一个表(而不是引用另一个表中的列)。
我使用的是 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);
并得到以下错误:
消息 1767,第 16 级,状态 0,第 1 行
外键 'FK__tblA__Tabel__27CED166' 引用无效表 'information_schema.tables'。
消息 1750,第 16 级,状态 0,第 1 行
无法创建约束。查看以前的错误。
我也尝试过检查约束
ALTER TABLE dbo.tblA
ADD CHECK (OtherTable IN (SELECT TABLE_NAME FROM information_schema.tables));
但这也给了我一个错误:
消息 1046,第 15 级,状态 1,第 6 行
在这种情况下不允许子查询。仅标量表达式 是允许的。
有没有可能有这种约束?
【问题讨论】:
-
如果没有其他方法,请尝试基于触发器的解决方案。
标签: sql tsql sql-server-2008-r2 foreign-keys check-constraints