2012-06-15 92 views
2

假設我有一個包含許多子類型表的超類型表。我有興趣使他們不相交子類型,因爲超類型表只指向每行可能的子類型表中的一個。在網絡上,我遇到了子類型鑑別器的描述,這是一個放入超類型表中的新列,它是一個小代碼(通常是一個字符),用於標識該行屬於哪個子類型。子類型鑑別器如何使用?

我在實踐中找不到任何實際的例子。如果我在C#中工作,我想查詢表的子類型鑑別器列,然後針對某個鍵 - >值列表([sub type discriminator] - > subtype_table_name)進行測試以創建正確的SQL以加入正確的表?

或者,SQL Server中是否存在用於此目的的一些查看/ SQL查詢語法?

基本上,我想知道在哪個級別上我必須真正執行邏輯來使鑑別器有用。

回答

2

你的查詢將包括以下內容:

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

並希望SQL Server的評估加開始從子表讀取之前加入斷言。但這並不能保證。

這種模式的好處是它推廣到任意查詢,即使對於具有不同子類型的多行。

+0

謝謝,我將在稍後嘗試您的答案。我會將問題留出一段時間,以查看是否有其他人有任何輸入。 – user17753

+0

我在sql server 2005的一些虛擬DB上試過這個。它似乎工作正常,但並不完全確定你對非保證部分的含義。 – user17753

+0

我在做一個關於表現的聲明。我希望我發佈的查詢只能在運行時訪問Root和各個子進程(與只訪問所有表相對比)。 – usr

相關問題