2012-01-04 37 views
0

我們數據庫中的3個表:。編寫在表模式之間切換的存儲過程/函數的最佳方式是什麼?

  • [未批准] [數據]
  • [批准] [數據]
  • [歷史] [數據]

我們目前有3個存儲過程,每個都運行相同的select查詢以從表中獲取數據,但唯一的區別是模式。

什麼會是這樣說,在一個存儲過程(最好不用動態SQL)

+2

只是好奇,你爲什麼不剛纔有一個[數據]表區別於狀態的標識,所以你必須一個FK到一個狀態表,其ID將爲未批准,已批准和歷史。如果一個未批准的數據獲得批准,您只需更新StatusID,那麼您只需要一個查詢並按狀態篩選 – kd7 2012-01-04 13:54:48

+0

@ kd7是的,SIMPLIEST ever狀態機分裂爲不同的模式和表!是的,肯定TomTom是正確的 – 2012-01-04 13:59:19

回答

5

沒有最佳方式的最佳途徑。

您可以使用IF .. ELSE IF構造來決定選擇哪一個。

但他們是3個不同的對象,所以這是預期的。你沒有使用正確的模式,我建議......

從dba.se:

+4

+1。最好的方法是解決這個可笑的反模式模式的使用,並重建它,以便正確完成。 – TomTom 2012-01-04 13:53:51

2

您可以像創建視圖:

CREATE VIEW dbo.blabla 
AS 
SELECT 0 as SourceSchema, otherfields from [Unapproved].[Data] 
UNION ALL 
SELECT 1 as SourceSchema, otherfields from [Approved].[Data] 
UNION ALL 
SELECT 2 as SourceSchema, otherfields from [History].[Data] 
GO 

CREATE PROC GetTheData 
@fromwhere int 
As 
select otherfields from dbo.blabla where SourceSchema = @fromwhere 

但是

我不能說這是一個OPTIMAL的方式。

我與@TomTom同意下@gbn後

相關問題