2018年6月13日 星期三

SQL Server 2016 發生 System.Data.SqlClient.SqlException (0x80131904): 已停用 .NET Framework 中的使用者程式碼執行。請啟用 "clr enabled" 組態選項

因規劃將使用已久的 Windows SQL Server 2008 R2 移轉到Windows SQL Server 2016,於是著手建置新的 Windows SQL Server 2016,安裝的過程中最大的差異是安裝程式會引導你上網下載後安裝SQL Server Management Studio,目前的SQL Server Management Studio (SSMS)版本為17.7,SSMS 17.x 安裝不會升級或取代 SSMS 16.x 版或更早版本, SSMS 17.x 會與舊版本並存安裝,讓兩個版本同時可供使用,SSMS 17.x可以支援 SQL Server 2008 ~ 2017、Azure SQL、SQL Analysis Service PaaS。

請安裝新的 SQL Server Management Studio (SSMS)下載位置如下:

下載 SQL Server Management Studio

安裝完開始在資料庫移轉驗證,先將資料表由 Windows SQL Server 2008 R2 移轉到Windows SQL Server 2016,網站程式更改資料表連線參數,查看網站可正常開啟,但進入網站操作時卻發生異常報錯的情形,錯誤訊息如下:

System.Data.SqlClient.SqlException (0x80131904): 已停用 .NET Framework 中的使用者程式碼執行。請啟用 "clr enabled" 組態選項。

"clr enabled" 組態選項是做什麼用的呢?
這個 "clr" 即為 Common Language Runtime (CLR)

SQL Server 2005 導入了 .NET Framework for Microsoft Windows 之 Common Language Runtime (CLR) 元件的整合。 這表示您可以使用任何 .NET Framework 語言 (包括 Microsoft Visual Basic .NET 及 Microsoft Visual C#),撰寫預存程序 (Stored Procedure)、觸發程序 (Trigger)、使用者定義型別、使用者定義函式、使用者定義彙總及資料流資料表值函式。
※以上截錄自 Microsoft Docs 

 
Common Language Runtime (CLR)在Windows SQL Server 2016預設停用了,而原有網站的資料表仍有預存程序 (Stored Procedure)的需求,所以在最簡單的方式下,只好先啟用 Common Language Runtime (CLR) 元件。

該如何查詢Common Language Runtime (CLR) 元件的停用及啟用?需使用以下命令:

EXEC sp_configure 'clr enabled'; 
 顯示"clr enabled" 組態選項的目前設定

EXEC sp_configure 'clr enabled' , '1';
RECONFIGURE; 
 將選項值設定為1來啟用選項。若要停用此選項,請將值設定為 0。
 並透過 RECONFIGURE 來完成異動

修改前


選項值設定為1來啟用選項


修改後