如何在允许为null的字段上指定约束但如果值存在则应该是现有表中主键的值之一? 看看代码:
CREATE TABLE TestTable
(
RowId int IDENTITY NOT NULL PRIMARY KEY,
RowParentId int NULL, -- < how do I specify constraint that RowParentId if not NULL should be RowId (foreign key to existing table?)
RowName nvarchar(30),
RowShortName nvarchar(10)
)
GO
我希望能够生成父子视图,而不会限制现有父级的深度和强制约束。
希望我能够传达我正在寻找的东西。
干杯
答案 0 :(得分:5)
这不仅仅是外键吗?
RowParentId int NULL references ParentTable (ParentTableIdColumn),
如果它不为null,则它必须是父表中的值。
答案 1 :(得分:1)
ALTER TABLE TestTable
ADD CONSTRAINT fk_testtable_parent
FOREIGN KEY (RowParentId)
REFERENCES TestTable(RowId)
请注意,在列中保留NULL
是一个坏主意,因为索引无法搜索。
您最好使用id = 0
添加代理记录,将您的真实根引用到此记录中,并将其从选择中排除。
答案 2 :(得分:0)
您可以拥有一个引用回同一个表的外键约束。您可能希望查看层次结构的其他模型。链式链模型在SQL中存在很多问题。在Google上使用“Joe Celko层次结构”,您应该能够找到有关模拟层次结构的其他方法的信息。
答案 3 :(得分:0)
您想要创建外键。有几种方法可以做到这一点,但像这样的单个键的最简单方法是在该列的workld“null”之后添加以下内容:
references table_name (column_name)
您可能需要在此之前添加“外键”字样,我不记得了。无论哪种方式都应该照顾它。
答案 4 :(得分:0)
ALTER TABLE [dbo] .TestTable with CHECK ADD CONSTRAINT [FK_TestTable_RowId_TestTable_RowParentId] FOREIGN KEY(RowParentId)REFERENCES TestTable(RowId)