Как работать с объектами баз данных CLR
Помимо языка программирования Transact-SQL, для создания объектов базы данных, которые извлекают и обновляют данные, вы можете использовать любые языки .NET Framework. Объекты базы данных, написанные в управляемом коде, называются CLR-объектами базы данных SQL Server. Описание преимуществ использования CLR-объектов базы данных, размещенных в SQL Server, а также рекомендации по выбору между Transact-SQL и CLR, см. в статьях Общие сведения об интеграции со средой CLR и Преимущества использования управляемого кода для создания объектов баз данных.
Чтобы создать CLR-объект базы данных в SQL Server Data Tools, необходимо создать проект базы данных и добавить к нему CLR-объект базы данных. В отличие от предыдущих версий Visual Studio, вам не нужно создавать отдельный проект СРЕДЫ CLR, а затем добавлять ссылку на нее из проекта базы данных. После сборки и публикации проекта базы данных автоматически происходит одновременно публикация объектов CLR в проекте. После публикации этих объектов CLR они могут вызываться и выполняться как любые другие объекты базы данных.
На страницах свойств CLR и сборки CLR имеется множество параметров, относящихся к использованию объектов базы данных CLR в конкретном проекте. В частности, на странице свойств CLR имеется настройка уровня разрешений, которая определяет разрешения для сборки CLR. На ней также имеется параметр «Формировать язык DDL», указывающий, должен ли формироваться код языка DDL для объектов базы данных CLR, добавленных к проекту. Страница свойств сборки CLR содержит все параметры компилятора, которые можно задать для настройки компиляции кода CLR в проекте. Чтобы получить доступ к этим страницам свойств, щелкните правой кнопкой мыши проект в обозревателе решений и выберите пункт Свойства.
Чтобы включить отладку для CLR-объектов базы данных, откройте обозреватель объектов SQL Server. Щелкните правой кнопкой мыши имя сервера, который содержит подлежащие отладке CLR-артефакты базы данных, и выберите команду Разрешить отладку SQL/CLR. Откроется окно с предупреждением: "Обратите внимание, что в ходе отладки все управляемые потоки на этом сервере будут остановлены. Включить отладку SQL CLR на этом сервере?". При отладке объектов базы данных CLR критическое выполнение прерывает все потоки на сервере, затрагивая других пользователей. По этой причине не следует отлаживать приложения для объектов базы данных CLR на рабочем сервере. Также следует отметить, что после начала отладки слишком поздно изменить параметры в SQL Server обозреватель объектов. Изменения, внесенные в SQL Server обозреватель объектов, не вступают в силу до начала следующего сеанса отладки.
Дополнительные сведения о требованиях к созданию CLR-объектов базы данных см. в статье Building Database Objects with Common Language Runtime (CLR) Integration (Создание объектов базы данных при помощи интеграции со средой CLR).
Предупреждение
В следующей процедуре используются сущности, созданные в предыдущих процедурах, в разделах "Разработка автономных баз данных для проектов".
Добавление объекта базы данных CLR к вашему проекту
Щелкните правой кнопкой мыши проект базы данных TradeDev в обозревателе решений, а затем последовательно выберите Добавить и Создать элемент.
Выберите шаблон C# SQL CLR и пункт SQL CLR User-Defined Function (Определяемая пользователем функция CLR SQL). Примите имя по умолчанию и нажмите кнопку "Добавить".
Добавьте следующий код в текст класса. Эта функция предназначена для проверки номеров телефонов, применяемых в США. Номер телефона должен состоять из 3 цифр, при желании заключенных в круглые скобки, за которыми следует ряд из 3 цифр, а затем ряд из 4 цифр. К примерам поддерживаемых форматов относятся (425) 555-0123, 425-555-0123, 425 555 0123 и 1-425-555-0123.
[SqlFunction(IsDeterministic = true, IsPrecise = true)] public static SqlBoolean validatePhone(SqlString phone) { string aNorthAmericanPhoneNumberPattern = @"^[01]?[- .]?(\([2-9]\d{2}\)|[2-9]\d{2})[- .]?\d{3}[- .]?\d{4}$"; if (!phone.IsNull) { Regex regex = new Regex(aNorthAmericanPhoneNumberPattern); return regex.IsMatch(phone.Value); } return true; }
Обратите внимание, что выражение
Regex
подчеркнуто красной чертой. Щелкните правой кнопкой мышиRegex
и выберите Разрешить, а затем С использованием System.Text.RegularExpressions.Если вы разрабатываете экземпляр сервера Microsoft SQL Server 2012, можно пропустить этот шаг. В противном случае SQL Server 2005 и SQL Server 2008 будут поддерживать только проекты базы данных, построенные с применением версий 2.0, 3.0 или 3.5 инфраструктуры .NET Framework. Чтобы убедиться в том, что целевая платформа .NET задана правильно, щелкните правой кнопкой мыши проект базы данных TradeDev в обозревателе решений и выберите Свойства. На странице свойств SQLCLR измените значение Целевая платформа, указав .NET Framework 3.5 или более раннюю версию. Нажмите кнопку "Да" на последнем экране, чтобы закрыть и повторно открыть проект.
Щелкните правой кнопкой мыши проект TradeDev и выберите команду Построить, чтобы создать проект.
Дважды щелкните файл Suppliers.sql и выберите пункт Конструктор представлений, чтобы открыть таблицу Suppliers в конструкторе таблиц.
Выберите пустую строку в сетке столбцов, чтобы добавить новый столбец в таблицу. Введите значение phone в поле Имя, значение nvarchar (128) в поле Тип данных и сохраните флажок Разрешить значения NULL.
Щелкните правой кнопкой мыши узел Проверочные ограничения в контекстной области и выберите Добавить новое проверочное ограничение.
Замените предусмотренное по умолчанию определение ограничения в области скриптов следующим.
CONSTRAINT [CK_Suppliers_CheckPhone] CHECK (dbo.validatePhone(phone)=1),
Это позволяет гарантировать проверку любых данных, введенных в новое поле номера телефона, с помощью определяемой пользователем функции CLR, добавленной ранее.
Нажмите клавишу F5 для построения и развертывания проекта в локальной базе данных.
Использование объектов базы данных CLR
В обозревателе объектов SQL Server перейдите к локальной базе данных, в которой должен быть развернут проект.
По умолчанию в SQL Server отключена интеграция со средой CLR. Для использования объектов базы данных CLR необходимо включить интеграцию со средой CLR. Для этого необходимо воспользоваться параметром "clr enabled" хранимой процедуры sp_configure. Дополнительные сведения см. в статье о параметре clr с включенным параметром.
Щелкните базу данных правой кнопкой мыши и выберите пункт Создать запрос. В области запроса вставьте следующий код и нажмите кнопку Выполнить запрос.
sp_configure 'clr enabled', 1; GO RECONFIGURE; GO
Щелкните правой кнопкой мыши таблицу Suppliers и выберите Просмотр данных.
Введите 5 в качестве значения id, Contoso в качестве значения name, оставьте поле address пустым и задайте 425 3122 1222 в качестве значения phone. Перейдите с помощью клавиши табуляции с поля phone на другое поле и обратите внимание на сообщение со сведениями о конфликте инструкции
INSERT
с существующим проверочным ограничением, в котором проверяются данные, введенные в поле phone, с использованием заранее заданного шаблона номера телефона.Измените введенные данные на 425 312 1222 и перейдите с помощью клавиши табуляции на другое поле. Обратите внимание, что в это время происходит подтверждение ввода.
См. также
Преимущества интеграции со средой CLR
Преимущества использования управляемого кода для создания объектов базы данных
Создание объектов базы данных с интеграцией со средой CLR