Отладка 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 #?

Ответы на вопрос(4)

Ваш ответ на вопрос