2012-04-06 21 views
0

嗨我有一個使用基於我傳遞的年份的表名稱的過程。我如何在sproc中使用它?在存儲過程中動態決定表名

例:tables_2000tables_2001,...

+2

你使用的是什麼風格的SQL?動態SQL可以被證明是一個答案,但它不同於SQL提供者。你也應該總是在你的問題中加上標籤。 – 2012-04-06 06:39:58

+2

這是一個最不幸的模式。大概每張桌子都有相同的結構? – wallyk 2012-04-06 06:40:45

+0

請詳細說明您的問題。 – SMK 2012-04-06 06:41:41

回答

0

剛要扔了這一點,在那裏幫助解決不好的架構設計。

創建一個視圖,然後根據今年

SELECT 2000 AS Year, * 
FROM tables_2000 
UNION 
SELECT 2001 AS Year, * 
FROM tables_2001 
UNION 
SELECT 2002 AS Year, * 
FROM tables_2002 
UNION 
...etc 

這是假設所有tables_20XX具有相同的架構做一個where子句的視圖。

您可能可以更有效地使用動態sql來做到這一點,但是您並未在標籤或問題中指定您的sql供應商。

+0

這個模式可能被選擇來加速一些事情。這樣的觀點會產生相反的效果。如果可能的話,只創建一個表格,或者爲當前年份創建一個表格,併爲整個歷史創建一個表格。歷史記錄表將會變慢,但包含所有數據。如果您需要更少的歷史記錄,當年的表格速度更快,並且可以(可能)在大多數情況下使用。 – GolezTrol 2012-04-06 06:50:31

+0

在我看來,設計依然不好。年度指數幾乎可以完全解決這些問題。 – 2012-04-06 06:52:52

+0

即使年份與歷史記錄ID之間的關係表也適用。每年爲多個表格創建簡直是糟糕的設計。有時開發人員必須處理這個問題。我知道我在一家公司工作,很多初始數據庫都是由工程師設計的,而不知道正確的數據庫設計或編程。隨時都會發生,你只需要忍受它,並在最初的設計中解決問題。 – 2012-04-06 07:24:47