Отладка SSDT SQL Server не достигает точек останова CLR
Я применилПатч для инструментов данных SQL Server в Visual Studio 2012 (Premium) и создал проект пользовательской функции SQL Server CLR в C #:
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 я щелкаю правой кнопкой мыши по недавно опубликованной пользовательской функции и выбираю «Выполнить функцию ...». Мне предлагается указать пример входного значения, и 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 #, щелкните правой кнопкой мыши функцию UDF в проводнике объектов SQL Server и на этот раз выберите «Функция отладки ...», я попаду в отладчик для сгенерированного SQL тестовый скрипт. Я могу пройтись по операторам SQL до конца скрипта, который возвращает правильный результат, но точка останова в моем коде C # никогда не достигается в отладчике C #.
Терминология для этой функции кажется вводящей в заблуждение. Для любого программиста «отладка» функции означает переход по исполняемым строкам в коде самой функции. Простое создание тестового набора SQL, который вызывает мою скомпилированную функцию и возвращает результат - это просто «тестирование» функции. Самое большее, единственное, что «отлаживается» - это сам сгенерированный инструментом тест, потому что вы не можете «шагнуть в» код CLR. Единственный вариант - «Перешагнуть» это.
Так как же заставить Visual Studio на самом делеотлаживать, и поразить точку останова в моем коде UDF C #?