2012-09-14 35 views
0

我正在升級我的應用程序以使用存儲過程而不是像現在這樣使用動態SQL。我想要做的是調用一些過程,例如setUser(id),然後在當前連接期間將該ID繼承。我有一個UserVariables表,它存儲了與當前用戶有關的重要數據(我沒有使用會話來存儲這些數據,因爲會話只會持續很長時間;這樣用戶數據就會在登錄中持久化)。我想選擇數據,例如他們當前正在查看的客戶端的ID,而不必將用戶ID傳遞到每個存儲過程中。如果你喜歡,可以稱之爲懶惰!SQL Server連接特定的變量

我已經搜索了很多,看了各種文章,但他們都是關於全局變量(我們不能改變)或者其他不相關的東西。

基本上我想要做的就是在頁面加載開始時設置用戶ID(甚至可能會在某些時候將其移到session_start方法中),然後在所有後續存儲過程調用或查詢期間訪問此變量。

編輯:我後來就像當你在一個asp頁面的開始處設置一個變量(我的應用程序被寫入好的'classic asp'),然後你在整個頁面和任何包含中使用它。如果你喜歡,可以考慮代表連接的asp頁面和包含代表存儲過程的代碼。

+1

你可以看看'CONTEXT_INFO' –

+0

@Oded - 'SET CONTEXT_INFO'和'SELECT CONTEXT_INFO()'不需要任何特定的權限AFAIK並且滿足保持「當前連接持續時間」值的要求。 –

+0

我所追求的就像當你在一個asp頁面的開始處設置一個變量(我的應用程序被寫入良好的'classic asp'),然後你在整個頁面和任何包含中使用它。如果你願意的話,可以把它看作代表連接的asp頁面,並且包含代表存儲過程。我不相信我可以使用context_info()來設置從表中獲取的用戶標識。 – ClarkeyBoy

回答

0

我發現了一個合適的替代方法來設置連接特定的變量。我有一個函數,它使用sproc名稱,一個參數名稱數組,一個參數值數組和一個返回變量(即一個byref變量)。我修改了這個函數,這樣當刷新參數的時候,它會檢查一個userid參數,如果它存在,就會自動設置它。如果它存在,它會返回'retval'參數,否則將返回變量設置爲myCmd.execute