Вернемся в 1999 году, или, возможно, в начало 2000 года, ходили слухи о возможности использования VBScript для написания хранимых процедур в SQL Server. Однако, когда была выпущена SQL Server 2000, эта функция не была включена. Перейдем к ноябрю 2005 года, и наконец была выпущена SQL Server 2005 (также известная как Yukon). Одной из самых обсуждаемых функций в SQL Server 2005 была интеграция CLR, которая позволяла разработчикам использовать любой язык .Net для создания объектов программирования базы данных.
Для разработчиков приложений, знакомых с C# или любым другим языком .Net, это было революционной функцией. Однако для администраторов баз данных, которые не были знакомы с языками программирования, это казалось пугающим. Возникло много вопросов, таких как, мертв ли T-SQL и нужно ли каждому администратору баз данных изучать C#. Хорошая новость в том, что T-SQL все еще жив и SQL Server 2005 внедрил новые функции для улучшения языка. Администраторы баз данных могут продолжать выполнять свои обязанности на T-SQL и использовать новые инструменты управления, включенные в SQL Server 2005.
Интеграция CLR не была добавлена в SQL Server просто так. Есть сценарии, где управляемая .Net-процедура может работать быстрее, чем написанная на T-SQL. Кроме того, написание кода на современном языке программирования, таком как C#, может привести к лучшему качеству кода. Однако важно отметить, что интеграция CLR не вносит ничего нового в управление данными в реляционной базе данных. Декларативная множественная обработка DML все еще работает быстрее процедурной обработки в этой области.
Одна из опасностей, связанных с интеграцией CLR, заключается в том, что она может открыть двери для программистов, которые имеют мало знаний о управлении данными. Хотя это может быть возможно, маловероятно, что каждый начнет программировать функциональность базы данных только потому, что ему знаком синтаксис. Однако существует риск увидеть больше процедурного кода и потенциально сомнительного использования SQL Server, такого как вызов процедур веб-служб или работа с файловой системой.
Интеграция CLR – это интересный инструмент, который может быть полезен в определенных ситуациях, но его следует использовать осторожно. Это не самая важная новая функция в SQL Server 2005, но она требует наибольшего охвата, чтобы пользователи понимали ее возможности и ограничения. Разработчики должны быть осведомлены о влиянии их реализаций .Net на SQL Server, а администраторы баз данных могут захотеть просмотреть выполняемый код в своих базах данных.
В предстоящих частях этой серии мы более подробно рассмотрим, как работает интеграция CLR, что можно сделать с ее помощью и когда следует или не следует ее использовать. Чтобы начать, давайте рассмотрим пример пользовательской скалярной функции, реализованной на C#, и как ее использовать в SQL Server 2005.
Использование интеграции CLR для проверки адресов электронной почты
Одна из часто встречающихся запросов в SQL Server – это возможность использования регулярных выражений для целей проверки. Хотя SQL Server 2005 не имеет этой функции, .Net Framework имеет ее. С помощью интеграции CLR мы можем реализовать пользовательскую функцию на C#, которая принимает строку и проверяет ее по регулярному выражению.
Вот пример пользовательской скалярной функции, реализованной на C#:
using System.Data.SqlTypes;
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlBoolean RegExValidate(SqlString expressionToValidate, SqlString regularExpression)
{
Regex regex = new Regex(regularExpression.Value);
return regex.IsMatch(expressionToValidate.Value);
}
}
Эта функция, называемая RegExValidate, принимает два параметра: выражение для проверки и регулярное выражение для проверки. Она использует класс Regex из .Net Framework для выполнения проверки и возвращает SqlBoolean, указывающий, соответствует ли выражение формату, определенному в регулярном выражении.
Чтобы использовать эту функцию, нам нужно активировать интеграцию CLR в SQL Server 2005. После активации мы можем создать новый проект в Visual Studio 2005 и выбрать тип проекта SQL Server. Затем мы можем добавить пользовательскую функцию и реализовать логику на C#. После компиляции проекта в сборку мы можем развернуть его в базе данных SQL Server.
После развертывания функцию можно использовать для проверки строк с помощью регулярных выражений. Например:
DECLARE @regex NVARCHAR(100)
SET @regex = N'^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$'
SELECT name, emailaddress, dbo.RegExValidate(emailaddress, @regex) AS validemail
FROM dbo.PEOPLE
Помимо использования функции напрямую, мы также можем создать ограничение CHECK, которое использует функцию для обеспечения ввода только допустимых адресов электронной почты в таблицу.
Интеграция CLR в SQL Server 2005 – это мощный инструмент для разработчиков и администраторов баз данных, но его следует использовать осмотрительно. Важно понимать его возможности и ограничения, чтобы принимать обоснованные решения о его использовании. Следите за новыми статьями в этой серии,