Проверка электронной почты Microsoft SQL Server - PullRequest
5 голосов
/ 09 февраля 2010

При использовании Microsoft SQL Server 2005 и более поздних версий какой код использовать для проверки правильности адреса электронной почты?
Есть ли тип данных электронной почты?
Есть ли ограничения на проверку электронной почты?
Есть ли правило электронной почты?
Есть ли триггер электронной почты?
Существует ли хранимая процедура проверки электронной почты?

Ответы [ 4 ]

6 голосов
/ 09 февраля 2010

Я обычно не рекомендую использовать хранимую процедуру CLR, но это хорошее применение.Возможности SQL по обработке строк невелики, в то время как использование .NET Regex в хранимой процедуре CLR довольно просто, и вы можете использовать один из многих существующих шаблонов Regex для удовлетворения ваших потребностей (например, один из этих ).См. Регулярные выражения, упрощающие сопоставление с шаблоном и извлечение данных

В противном случае (некоторые администраторы очень строго относятся к включению функции CLR), возможно, это может представлять интерес:

Работа с адресами электронной почты в SQL Server

Обновление : в ответ на вопрос в комментариях: хранимая процедура CLR - это объект базы данных внутриэкземпляр SQL Server, который запрограммирован в сборке, созданной в общеязыковой среде выполнения (CLR) Microsoft .NET Framework, такой как Visual Basic или C #.

Создание хранимой процедуры CLR в SQL Server включает в себяследующие шаги:

  • Определить хранимую процедуру как статический метод класса на языке, поддерживаемом .NET Framework.Дополнительные сведения о программировании хранимых процедур CLR см. В разделе «Хранимые процедуры CLR».Затем скомпилируйте класс для сборки сборки в .NET Framework с помощью соответствующего языкового компилятора.

  • Зарегистрируйте сборку в SQL Server с помощью оператора CREATE ASSEMBLY.Дополнительные сведения о работе со сборками в SQL Server см. В разделе Сборки.

  • Создайте хранимую процедуру, которая ссылается на зарегистрированную сборку, с помощью оператора CREATE PROCEDURE. Ссылка .

См. Написание хранимых процедур CLR на C # - Введение в C # (часть 1)

1 голос
/ 14 января 2012

Если включена автоматизация OLE, вы можете легко создать UDF для обработки регулярных выражений, а затем просто вызвать это:

CASE WHEN dbo.RegExFind
    (
    'joe@stackoverflow.com',
    '^[a-z0-9][a-z0-9._-]*@[a-z0-9][a-z0-9.-]*[a-z0-9]\.[a-z][a-z]+$',
    1  -- Case-insensitive or not
    ) = 1 THEN 'OK' ELSE 'Not OK' END

Я не помню, откуда я взял код для RegExFind() UDF, но похоже, что код уже присутствует в StackOverflow, здесь .

1 голос
/ 09 февраля 2010

В SQL Server нет встроенного механизма проверки адресов электронной почты.

Существует множество регулярных выражений, которые проверяют адрес электронной почты (некоторые намного длиннее других), например, здесь , см., В частности, «Официальный стандарт: RFC 2822», рег.

Теперь SQL Server не имеет встроенной поддержки для запуска регулярных выражений, поэтому, если вы действительно хотите сделать это в SQL, вам необходимо использовать функциональность CLR - т.е. написать функцию .NET, которая выполняет проверку, который затем может быть вызван из SQL.

Однако я бы проверил адрес электронной почты раньше, прежде чем он попадет в базу данных.

1 голос
/ 09 февраля 2010

Вы можете написать управляемый SP, используя класс Regex. Проверка электронной почты в соответствии с RFC - сложная вещь. Мы просто запрашиваем AD для существования пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...