2009-10-19 82 views
0

我正在尋找一種基於表名列表來加入一系列SQL表的方法。表名列表可以隨着系統的增長而改變,但我需要確保聯接在所有表上隨着它們的增長而運行。SQL根據名稱列表連接表

列表中的每個表都將具有一個名爲ActivityID的公共列,該列是返回到作爲聯接的源表的Activity表的外鍵。

我想過可能是創建一個varchar並在執行之前構建查詢。這是最好的方式,還是可以在沒有構建varchar的情況下創建連接語法?

+0

您的意思是使用「sql-server」標籤而不是「sql」和「server」嗎? – Andomar 2009-10-19 09:50:45

回答

1

我會把查詢放在視圖中。在添加新表格時,請改變視圖以包含新表格。這將比動態sql更有效。

如果不控制誰/時增加了一個表,類似下面的動態SQL將在SQL Server數據庫服務器:

declare @query nvarchar(max) 
set @query = 'select * from t1 ' 

select 
    @query = @query + 'left join ' + name + 
     ' on t1.ActivityID = ' + name + '.ActivityID ' 
from sys.tables 
where name like '%Activity%' 

exec (@query) 

話又說回來,我不知道調用程序是如何知道哪些字段預期。

+0

看起來您正在考慮與我最初想的相同的動態組合SQL。我會繼續使用這條路線。 – 2009-10-19 15:00:50

1

標準SQL無法做到這一點。無論如何,這通常是一個糟糕的設計。某些供應商的擴展允許Oracle在匿名PL/SQL塊中使用EXECUTE IMMEDIATE

您可能需要在外部構建語句或使用類似存儲過程的語句來構建語句並執行它。

+0

我對數據庫設計沒有任何控制權。有問題的數據庫是底層的Microsoft CRM數據庫,它在所有方面看起來都很通用。我無法確定任何提供關係實例信息的表,因此我不得不恢復找到應以另一種方式連接的表。 也許有人知道我可以從數據庫中查詢CRM中現有的關係嗎? – 2009-10-19 09:53:21