2011-10-13 234 views
0

我繼承了一個看起來需要我使用遊標或while循環的系統。 鑑於以下表格,我想獲得與會者的名稱,例如在這種情況下避免SQL遊標

比爾
鮑勃

吉爾

與會者
sourceTable會| SourceTableId
男孩| 1個
男孩| 2
女孩| 2
女孩| 1

男孩
ID |姓
1 |比爾
2 |鮑勃

女孩
ID |姓
1 |吉爾
2 |簡

注意,系統沒有實際使用與會者,男孩&女孩,而是使用合同,訂單和其他這樣的實體等,但它更容易,更容易代表這種形式。 有可能是負載更多的查找表,不僅僅是「男孩」和「女孩」所以

有沒有辦法,我可以通過不使用遊標或其他基於行的操作來實現這一點。

回答

2

如果我沒有理解這個查詢應該工作:

SELECT FirstName 
    FROM Attendees 
    join Boys on id = SourceTableId 
WHERE SourceTable = 'Boys' 
union all 
SELECT FirstName 
    FROM Attendees 
    join Girls on id = SourceTableId 
WHERE SourceTable = 'Girls' 
+0

感謝您的評論,但問題空間更大,所以源表可能是男孩,女孩,貓,狗,魚....所以工會需要數百個案例。對不起,應該更明確 –

+0

@丹黑色:它是每個基礎表的聯合部分,對吧?你對這種方法有什麼擔心 - 性能?實際上有多少個這樣的表格,它們各自包含多少個記錄? – Tao

+0

有794個可能的表,所以我擔心代碼的長度和靜態性質 –

0

一名工會可能是你要做到這一點,可能封裝在一個視圖中的唯一方法。如果你可以得到表的列表,那麼你可以編寫一個代碼生成器來生成視圖。如果需要,如果供應商不允許將其放入應用程序數據庫,則將該視圖置於同一服務器上的不同數據庫或模式中。

您可以編程方式識別您需要的表和列或從某處獲取列表嗎?

相關問題