搜尋本站文章

2011-03-05

停用(disable) IntelliSense;以使用「登入觸發程序(Logon Trigger)」,或是設定 SSMS 管理工具為例

在 SQL Server 2008 版本,對於 Transact-SQL 陳述式提供了 IntelliSense 功能。

Microsoft IntelliSense 提供一組使語言參考更容易存取的選項陣列。
當編碼時,您不需要讓編輯器在語言元素上執行搜尋。您可以保留您的內容、尋找您需要的資訊、將語言元素直接插入程式碼中,甚至可以讓 IntelliSense 自動完成您的輸入動作。

注意事項:
針對 Transact-SQL 大型指令碼啟用 IntelliSense 可能會降低緩慢電腦的效能。

若要停用 SQL Server Database Engine 所提供的 IntelliSense 功能,可以使用以下的方式:
(一)停用 SSMS 工具的 IntelliSense 功能
此種作法僅限於此台電腦,停止使用 IntelliSense 功能。
其他台有安裝 SSMS 工具的電腦,不會受到影響。

(二)使用「登入觸發程序(Logon Trigger)」
這是在 SQL Server 上,使用「登入觸發程序(Logon Trigger)」,限制此台 SQL Server Database Engine 上的所有連線,不得使用 IntelliSense 功能。

請參考以下的實作範例:

(一)停用 SSMS 管理工具的 IntelliSense 功能
步驟01. 執行 SSMS 管理工具,點選上方選單:「工具」\「選項」。
步驟02. 在「選項」視窗,在左邊窗格,展開「文字編輯器」\「Transact-SQL」節點,點選「IntelliSense」節點。請參考下圖所示:

步驟03. 在「Transact-SQL IntelliSense 設定」區域,取消勾選「啟用 IntelliSense」。
步驟04 點選「確定」,完成設定。

上述的設定,將會影響到新的連線,既有的連線不受到影響。


(二)使用「登入觸發程序(Logon Trigger)」
-- 透過LOGON事件所引發的觸發程序,確認哪些應用程式不可以連接到SQL Server
USE master
GO
IF  EXISTS (SELECT * FROM master.sys.server_triggers WHERE parent_class_desc = 'SERVER' AND name = N'IntelliSense_Connection_Limit_Trigger')
DROP TRIGGER [IntelliSense_Connection_Limit_Trigger] ON ALL SERVER
GO
CREATE TRIGGER IntelliSense_Connection_Limit_Trigger
ON ALL SERVER FOR LOGON
AS
BEGIN
 --如果應用程式名稱如下,則是 SQL Server Management Studio 用來查詢
 --IntelliSense 資訊的連接,透過 ROLLBACK 指令,直接放棄建立連接
 IF APP_NAME()
 LIKE '%Microsoft SQL Server Management Studio - Transact-SQL IntelliSense%'
  ROLLBACK TRANSACTION;
END;
GO

上述範例係為 APP_NAME() 函數若是返回包含有 Microsoft SQL Server Management Studio - Transact-SQL IntelliSense 字串時,對此連線執行 ROLLBACK TRANSACTION 來中斷此連線的登入行為。
在 SQL Server 記錄檔內,將記錄了以下的相關資料,請參考下圖所示:
錯誤: 3609,嚴重性: 16,狀態: 2。
交易在觸發程序中結束。已中止批次。
錯誤: 17892,嚴重性: 20,狀態: 1。
Logon failed for login 'xxx\Administrator' due to trigger execution. [CLIENT: ]


在「物件總管」內,展開「伺服器物件」\「觸發程序」節點,就可以檢視到「登入觸發程序(Logon Trigger)」,請參考下圖所示:



參考資料:

圖書:SQL Server 2008管理實戰-進階維護篇
第9章 DDL觸發程序與事件通知
http://www.delightpress.com.tw/book.aspx?book_id=SKUD00015

登入觸發程序
http://technet.microsoft.com/zh-tw/library/bb326598.aspx

登入觸發程序執行方針
http://msdn.microsoft.com/zh-tw/library/bb153915.aspx

如何:修改 IntelliSense 選項
http://technet.microsoft.com/zh-tw/library/ms173743.aspx

使用 IntelliSense
http://technet.microsoft.com/zh-tw/library/ms174184.aspx

選項 (文字編輯器/Transact-SQL/IntelliSense)
http://msdn.microsoft.com/zh-tw/library/bb964729.aspx