選擇我有一個返回同一列中的兩個觀點,但不同的行。存儲過程,並從兩個幾乎相同的觀點
我創建一個使用這些視圖的存儲過程。存儲過程很大,並在列之間搜索匹配的行。現在
,我的願望是這樣的:如果我收到了一下參數值爲0,那麼我應該從一個視圖獲取信息,如果該參數爲1,那麼我應該從另一種觀點的信息。
我已經認識到動態SQL是一個壞主意,和存儲過程我跟工作已經相當複雜。重新創建它是動態的不是一種選擇。
我也讀到它是不可能做到這一點:
select * from @table
因爲表的名字應該是靜態的,並且在給前沒有通過。一個由代碼存儲的過程。
我試圖做到的是這樣的:
SELECT TOP(@top) subtaskid,activityid FROM
(CASE WHEN @allProjects=1 THEN view_project_all ELSE view_project_mine) v
但是我得到錯誤信息,說「不正確的語法附近關鍵字‘案例’我意識到這個問題是密切相關的動態sql,和。可變視圖\表問題遍佈整個stackoverflow,但我認爲,因爲我的兩個表實際上是在存儲過程中,這是更多的功能比黑客...
問題是這樣的:有沒有一種方法來設置靜態變量,所以這一個選擇可以根據參數給出不同的意見?
你爲什麼不希望重複的代碼是什麼?這是問題嗎?動態sql是另一種方法。還有爲什麼要在SP中使用視圖,爲什麼不直接使用底層表,並且通過對這些視圖進行處理,似乎這些表訪問的是除了篩選礦vs所有表之外的其他表。您可以展開查詢,然後在單個語句中進行並進行適當的過濾。你能發佈視圖定義嗎? – 2012-07-24 08:16:39
對於不想重複代碼的明顯的原因是重構,並保持我們的代碼庫儘可能小。如果我們稍後要在這個程序中改變某些東西,我們將不得不在多個地方進行,這是一個耗時且昂貴的事情。 :)使用不同視圖的原因是我們的數據庫中的表格很大,並且有很多不需要的信息,直接進入表格意味着我不得不編寫大量邏輯來獲取這些信息。正確的順序。自從我在一家公司工作以來,視圖定義不可能發佈。對不起:) – 2012-07-24 08:20:13
它可能在小型解決方案中始終直接進入表格,並將所有邏輯放入sp中,但這些視圖用於代碼中,而不僅用於SP中。直接使用表格也是調整程序行爲的一個弱點。顧問可以改變觀點,並以不同於往常的方式工作,這是值得的。直接編程到表格通常不是一個好主意,只需要在兩個地方更改代碼,然後快速複製到更多,然後就可以了...總體而言,我完全不同意你的邏輯:) – 2012-07-24 09:03:46