2014-10-03 66 views
0

我有一個非常常見的設置,本地數據庫訪問2013.accde客戶端運行,與一些本地表,但大多數鏈接表和視圖運行在其公司的微軟SQL Server 2005.用VBA設置MSSQL數據庫變量,用於查看那裏

其中一個視圖應根據訂單表中的字段order_type篩選訂單。目前沒有,過濾器控制將被執行。

該視圖,我們稱之爲viewOrderFilter,必須是「動態的」。我認爲我會通過將該視圖查詢中的此字段order_type與數據庫變量進行匹配來實現該目標。

如何將@var_OrderFilter設置爲具有VBA代碼的值,以便我可以將WHERE order_type = @ var_OrderFilter添加到視圖的查詢中?

編輯: 這是有效的語法嗎?這些可以執行查詢,或者必須是存儲過程或其他?在代碼中,我希望測試一個int是否可以設置爲NULL,但不幸的是,如果我在任何地方在Microsoft Server Management Studio中輸入這個值,程序就會崩潰,所以我不能「嘗試」任何東西。

DECLARE @var_OrderFilter INT 
SET @var_OrderFilter=NULL 

感謝您的建議。

+0

你不能像這樣參數化一個視圖,而是使用一個函數。 – 2014-10-06 07:25:57

+0

是的,通過學習視圖,存儲過程和函數來獲得某種方式來使這個視圖動態化,我發現了這一點。原因是這個視圖是全局使用的,現在每個用戶都應該使用一個全局的「交換機」來進行所有使用它的查詢(不必使用它的所有VBA函數,分析它們並在適用的地方添加一個WHERE)檢查在運行的業務系統中沒有不良副作用)。我發現這樣做的唯一全局方式是將內部聯接添加到每個用戶表格字段,這會減慢視圖。添加您的評論作爲答案,我會接受! – 2014-10-06 11:38:11

回答

1

你不能像這樣參數化一個視圖。視圖必須在創建時完全定義。

要使用參數推遲決策或過濾到運行時,應該創建一個函數。

CREATE FUNCTION