Пошаговое руководство. Отладка пользовательской функции с табличным значением SQL CLR
Обновлен: Ноябрь 2007
Этот раздел применим к:
Выпуск |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Экспресс-выпуск |
||||
Standard |
||||
Pro и Team |
Условные обозначения таблицы:
Применяется |
|
Не применяется |
|
Команда или команды, скрытые по умолчанию. |
В этом примере демонстрируется описание отладки пользовательской функции с табличным значением SQL CLR (UDF).
Примечание. |
---|
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке, в зависимости от текущих параметров или выпуска. Чтобы изменить параметры, в меню Сервис выберите команду Параметры импорта и экспорта. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Отладка пользовательской функции с табличным значением SQL CLR
В новом проекте SQL Server Project установите соединение с базой данных. Дополнительные сведения см. в разделе Практическое руководство. Подключение к базе данных.
Создайте новую функцию с помощью кода из раздела первого примера ниже и присвойте ей имя TableOfPrimes.cs. Дополнительные сведения см. в разделе Практическое руководство. Разработка с помощью типа проекта SQL Server.
Добавьте сценарий, тестирующий функцию, включив его в оператор SELECT. В Обозревателе решений щелкните правой кнопкой мыши каталог TestScripts, выберите Добавить тестовый сценарий и вставьте код из раздела второго примера, следующего ниже. Сохраните файл под именем TestPrime.sql. Щелкните правой кнопкой мыши имя файла и выберите Использовать как сценарий отладки по умолчанию.
Установите точки останова в TableOfPrimes.cs, а затем в меню Отладка нажмите кнопку Пуск для компиляции, развертывания и модульного теста проекта. Появление указателя инструкций, имеющего вид желтой стрелки на точке останова, означает, что выполняется отладка кода SQL CLR.
Попробуйте использовать различные функции отладки.
В меню Отладка несколько раз нажмите Шаг с заходом, чтобы наблюдать построчное выполнение функции.
При проходе через функцию можно использовать окна Локальные переменные и Контрольные значения для просмотра значений различных элементов.
Снова нажмите кнопку Продолжить для завершения отладки функции.
В окне Выходные данные выберите Выходные данные базы данных из выпадающего списка Показать выход из; после этого можно просмотреть результаты выполнения двух запросов в сценарии TestPrimes.sql.
Пример
Это код, считывающий журнал событий.
using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Collections;
public partial class UserDefinedFunctions
{
struct primeIndex
{
public int n;
public int p;
public primeIndex(int n, int p)
{
this.n = n; this.p = p;
}
}
static bool isPrime(int p)
{
if (p < 2) return false;
if (p == 2) return true;
if (p % 2 == 0) return false;
for (int d = 3; d * d <= p; d+=2)
{
if (p % d == 0) return false;
}
return true;
}
static int nextPrime(int p)
{
int result = p + 1;
while (!isPrime(result)) result++;
return result;
}
[SqlFunction(FillRowMethodName = "Fill", TableDefinition = "n int,p int,est float")]
public static IEnumerable TableOfPrimes(int n)
{
int p = 1;
for (int i = 1; i <= n; i++)
{
p = nextPrime(p);
yield return new primeIndex(i, p);
}
}
private static void Fill(object source, out int n, out int p, out SqlDouble est)
{
primeIndex pi = (primeIndex)source;
n = pi.n;
p = pi.p;
if (n <5)
est = SqlDouble.Null;
else
{
double log = Math.Log(n);
double loglog = Math.Log(log);
est = n * (log + loglog - 1 + loglog / log - 2 / log);
}
}
}
Это тестовый сценарий вызова функции.
SELECT n,p,est FROM dbo.TableOfPrimes(50)
SELECT TOP 10 n, p, est, est/p AS factor FROM dbo.TableOfPrimes(500) ORDER BY factor DESC
SELECT TOP 10 n, p, est, est/p AS factor FROM dbo.TableOfPrimes(1000) WHERE n>500 ORDER BY factor DESC
См. также
Задачи
Практическое руководство. Создание и запуск пользовательской функции SQL Server в среде CLR