我申請SQL Server Data Tools patch到Visual Studio 2012(專業版),創造了在C#中的SQL Server CLR用戶定義函數項目:SSDT SQL Server調試不打CLR斷點
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlInt32 Add42(SqlInt32 in_param)
{
SqlInt32 retval = in_param + 42; // Set break point here.
return retval;
}
}
在SQL Server對象資源管理器窗格中,右鍵單擊新發布的UDF並選擇「執行函數...」。系統提示我提供示例輸入值,然後Visual Studio再將函數(再次)發佈到本地2012 SQL Server並生成腳本,看起來像這樣:
DECLARE @return_value Int
EXEC @return_value = [dbo].[Add42] @in_param = 5
SELECT @return_value as 'Return Value'
GO
...並執行它,返回47的預期結果。
如果我現在在CLR UDF C#代碼的可執行行上放置一個斷點,請右鍵單擊SQL Server對象資源管理器中的UDF函數,然後選擇「調試功能...「,我登陸調試器爲生成的SQL測試腳本。我可以逐句通過SQL語句到腳本的末尾,該腳本返回正確的結果,但C#代碼中的斷點永遠不會在C#調試器中達到。
此功能的術語似乎具有誤導性。對於任何程序員來說,「調試」一個函數意味着在函數本身的代碼中逐步執行可執行的行。簡單地生成一個調用我的編譯函數並返回結果的SQL測試工具就是「測試」函數。至多,「調試」唯一的東西是工具生成的測試本身,因爲你不能「步入」CLR代碼。唯一的選擇是「跨越」它。
那麼,如何讓Visual Studio來實際調試,在我的UDF的C#代碼命中斷點?
您是否試過單步執行[此MSDN文檔](http://technet.microsoft.com/zh-cn/library/ms131096.aspx)的步驟以查看是否跳過了一個步驟? –
@Scott - 我試過了,但是在告訴你如何創建一個SQL CLR函數或sproc--我已經明顯已經完成了 - 所有那篇文章給你的是Visual Studio調試101.你知道:「右鍵單擊一行然後選擇「添加測試類型的腳本」:「在解決方案資源管理器中,展開TestScripts目錄並雙擊Test.sql」我看不到「TestScripts」目錄在2012年或2010年的解決方案資源管理器,所以我不知道他們在說什麼。 – Buggieboy