2

假设我有一个包含许多子类型表的超类型表。我有兴趣使它们成为不相交的子类型,因为超类型表仅指向每行可能的子类型表之一。在网上我遇到了对子类型鉴别器的描述,它是放入超类型表中的一个新列,它是一个小代码(通常是一个字符),用于标识该行属于哪个子类型。

在实践中我找不到任何实际的例子。如果我在 C# 中工作,我想查询表的子类型鉴别器列,然后针对一些键->值列表([子类型鉴别器]->subtype_table_name)进行测试以创建正确的 SQL 来加入正确的表?

或者,SQL Server 中是否已经为此目的提供了一些视图/SQL 查询语法?

基本上,我想知道我必须在哪个级别实际执行逻辑以使鉴别器有用。

4

1 回答 1

2

您的查询将包括以下内容:

select *
from Root
left join Child1 on ... AND Root.Discriminator = 'C1'
left join Child2 on ... AND Root.Discriminator = 'C2'

并且希望 SQL Server 在开始从子表中读取之前评估附加连接谓词。但是,这并不能保证。

这种模式的好处是它可以推广到任意查询,即使对于具有不同子类型的多行也是如此。

于 2012-06-15T20:20:04.580 回答