The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何把 SQL Server 標準版當成 SQL Server Express 來用

大家會不會看到這標題覺得很奇怪,怎麼會有人安裝了 SQL Server 標準版了,還會想拿來當成 SQL Server Express 來用呢?其實真正的需求是這樣的,當我們要設定 SQL Server 連線參數時,在指定 Data Source 的時候會指定伺服器名稱,而有客戶的 ASP.NET 網站竟然把連線參數寫死在程式裡,而且廠商倒閉了以致於沒有原始檔可以修改後重新編譯,當時的資料庫的 Data Source 是採用 (local)\SQLEXPRESS 為伺服器名稱,現在的卻重新安裝了 SQL Server 標準版,所以根本連不上伺服器,這時學會這個技巧就很重要了。

一般來說,我們在安裝 SQL Server 2008 R2 Express 版 (安裝舊版也一樣) 之後會有一個 具名實體 (Named Instances) 叫做 SQLEXPRESS,如下圖示:

安裝 SQL Server 2008 R2 標準版/企業版/開發版 時,預設卻是 非具名實體 (unnamed instance),一般都是以 TCP/IP 的方式連線,只要指定 IP 位址或網域就能連線,如下圖示:

若要讓 非具名實體 的 SQL Server 變成能夠支援 具名實體 的連線,其實不需要重新安裝 SQL Server,直接透過 SQL Server 組態管理員 新增 別名 (Alias) 就可以了!以下是設定的步驟說明:

設定時有兩個欄位是重點,一個是「伺服器」欄位,輸入這台伺服器原本可以正常連接的「伺服器名稱」(也就是連接參數裡的 Data Source 屬性);另一個是「別名名稱」,要輸入你要模擬的「伺服器名稱」:

設定完之後,你就可以用別名輸入到連接參數中或直接透過 Management Studio 來測試是否能成功連接伺服器!

請注意:如果你的 SQL Server 是 64 位元的,在設定別名時要同時設定兩個地方,把 32bit 環境下的別名也設定一下,才不會造成有些 32 位元應用程式無法連接資料庫的問題,如下圖示:

最後,我再分享一個工作上的小經驗,我們之前有個案子,網站開發完成之後到客戶的正式主機部署,我們依照客戶提供的資料庫連接資訊進行設定,但是無論是使用 Management Studio 或透過 ASP.NET 來測試都一樣無法連線,我們反應給客戶知道,他也叫我們過去看他的電腦,的確是他的電腦可以正常連線,這時很直覺得會認為是防火牆的問題,但客戶堅稱他們在內網完全沒設定防火牆,所以又是一件鬼打牆的事件,我光是為了這件事弄了兩、三個小時,氣死我了!

我把所有能用的瑞士刀都拿出來用了,最終找到原因,其實客戶他們的 SQL Server 伺服器名稱 是:

172.16.14.33 \DBCLUSTER1

(備註:以上 IP 與具名實體皆為模擬,並非真的資料)

鄉親啊~ 你有沒有覺得很吐血阿~~ 他們的 伺服器名稱 IP 後面有多一個空白耶!而且少打一個空白就完全連不上,這是什麼鬼阿!!!

正所謂「不經一事、不長一智」,經過這次事件我終於瞭解到,原來 透過客戶特殊的設定 別名設定 的連線是透過字串完整比對的,差一個字元都不行,我們以上例來說,我們不是新增了一個 (local)\SQLEXPRESS 別名嗎?如果你用 localhost\SQLEXPRESS.\SQLEXPRESS 來連接資料庫,很抱歉,連不上!

魔鬼總是會在一些很細微的地方跑出來,這問題非常罕見,各位能看到這就當多學個經驗吧! ^_^

相關連結