我們數據庫中的3個表:。編寫在表模式之間切換的存儲過程/函數的最佳方式是什麼?
- [未批准] [數據]
- [批准] [數據]
- [歷史] [數據]
我們目前有3個存儲過程,每個都運行相同的select查詢以從表中獲取數據,但唯一的區別是模式。
什麼會是這樣說,在一個存儲過程(最好不用動態SQL)
我們數據庫中的3個表:。編寫在表模式之間切換的存儲過程/函數的最佳方式是什麼?
我們目前有3個存儲過程,每個都運行相同的select查詢以從表中獲取數據,但唯一的區別是模式。
什麼會是這樣說,在一個存儲過程(最好不用動態SQL)
沒有最佳方式的最佳途徑。
您可以使用IF .. ELSE IF構造來決定選擇哪一個。
但他們是3個不同的對象,所以這是預期的。你沒有使用正確的模式,我建議......
從dba.se:
+1。最好的方法是解決這個可笑的反模式模式的使用,並重建它,以便正確完成。 – TomTom 2012-01-04 13:53:51
您可以像創建視圖:
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後
只是好奇,你爲什麼不剛纔有一個[數據]表區別於狀態的標識,所以你必須一個FK到一個狀態表,其ID將爲未批准,已批准和歷史。如果一個未批准的數據獲得批准,您只需更新StatusID,那麼您只需要一個查詢並按狀態篩選 – kd7 2012-01-04 13:54:48
@ kd7是的,SIMPLIEST ever狀態機分裂爲不同的模式和表!是的,肯定TomTom是正確的 – 2012-01-04 13:59:19