我申请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