2012-04-26 64 views
1

我有刪除表上的觸發器,其中我使用函數HOST_NAME()來檢索執行操作的用戶,然後我檢查用戶存在用戶表中如果不是那麼我扔Raiserror。動作是從ASP.NET Web應用程序中執行的,我將動態地將「Workstation Id」添加到連接字符串,以便在刪除觸發器中具有當前記錄的用戶名。
修改HOST_NAME()在sql服務器

問題是我有時必須從SSMS手動運行一些腳本,並且Host_Name()包含當前登錄的用戶在sql server中的名稱,但該用戶在用戶表中沒有相應的行,然後發生Raiserror。問題是如何從SSMS運行刪除腳本並且沒有Rairserror?

+1

只是爲了澄清:你想修改一個系統函數,以便觸發器允許未經授權的用戶運行刪除腳本?我真的很茫然。如果你找到了一個方法來做到這一點,讓我知道,以便我可以找到一種方法來抵禦它。 – JAQFrost 2012-04-26 13:48:12

+0

澄清:我創建了這個問題,因爲我動態地添加「工作站ID」連接字符串從我的Web應用程序已記錄用戶名在刪除triger(然後我檢查名稱存儲在用戶表的Host_Name(),然後我做一些SQL ),但有時候我必須運行一些在用戶表中沒有對應行的帳戶。休息一段時間後,我發現了溶劑,我創建了自己的函數,在其中檢查Host_Name(),如果用戶名不存在於用戶表中,但名稱等於xyz,則從用戶表中返回用戶。我希望你現在明白我的問題。 – 2012-04-26 18:41:50

+0

我這麼認爲:你並不是真的想改變系統功能,你想把它包裝在一個自定義函數中,該函數返回腳本應該運行的用戶。請相應地編輯你的帖子,並回答你做了什麼來得到你想要的。 – JAQFrost 2012-04-27 13:25:23

回答

0

答案很簡單,使你的自定義函數覆蓋Host_Name(),如果Host_Name()包含名稱XYZ的用戶,那麼我返回用戶表中具有相應行的系統用戶的常量名稱。

+0

我建議的一件事是你完全做出一個新的功能並且調用它。覆蓋系統功能意味着你破壞了期望它們按照文檔工作的代碼。 – JAQFrost 2012-04-30 18:32:38

+0

好的,謝謝你的好建議 – 2012-04-30 18:42:24