Проверьте идентификатор (параметр) MSSQL в .NET или регулярном выражении - PullRequest
3 голосов
/ 22 апреля 2009

В проекте .NET мне нужно проверить, является ли строка допустимым идентификатором параметра Microsoft SQL Server 2005.

Пример: SELECT * FROM table WHERE column = @parameter

Есть ли метод класса времени выполнения для проверки правильности строки как параметра или регулярное выражение для проверки правил? (см. Ниже)

Из документации по идентификаторам параметры должны соответствовать следующим общим правилам идентификатора:

  1. Первый символ должен быть одним из следующих: * Буква, как определено по стандарту Unicode 3.2. Unicode определение букв включает в себя Латинские буквы от a до z, от А до Я, а также письмо персонажи с других языков. * Подчеркивание (_), знак (@) или числовой знак (#).
    Определенные символы в начале идентификатора есть особое значение в SQL Server. обычный идентификатор, который начинается с знак at всегда обозначает местный переменная или параметр и не может быть используется в качестве имени любого другого типа объект. Идентификатор, который начинается с числовой знак обозначает временный стол или процедура. Идентификатор, который начинается с двойных числовых знаков (##) обозначает глобальный временный объект. Хотя знак числа или двойной символы знака числа могут быть использованы для начать имена других типов объекты, мы не рекомендуем это практика. Некоторые функции Transact-SQL есть имена, которые начинаются с двойного в приметы (@@). Во избежание путаницы с эти функции не стоит использовать имена, начинающиеся с @@.
  2. Последующие символы могут включать следующее: * Буквы, как определено в стандарте Unicode 3.2. * Десятичные числа от Basic Латинские или другие национальные шрифты. * Знак at, знак доллара ($), число знак или подчеркивание.
  3. Идентификатор не должен быть зарезервированным словом Transact-SQL. SQL Server резервирует как прописные, так и строчные версии зарезервированных слов.
  4. Встроенные пробелы или специальные символы недопустимы.
  5. Дополнительные символы не допускаются.

Когда идентификаторы используются в Операторы Transact-SQL, идентификаторы, которые не соответствуют эти правила должны быть ограничены двойные кавычки или скобки.

Поскольку я хочу проверять только параметры, идентификаторы должны начинаться со знака @ и не должны быть разделены.

Ответы [ 2 ]

6 голосов
/ 22 апреля 2009

Я спотыкался о символьных классах Unicode, но как только я узнал, что они поддерживаются в регулярных выражениях .NET, я решил следующее регулярное выражение для решения моего вопроса:

@[\p{L}{\p{Nd}}$#_][\p{L}{\p{Nd}}@$#_]*

Это обеспечивает:

  • Идентификатор всегда начинается с @, что делает его параметром.
  • Нет @ во второй позиции, что позволяет избежать путаницы со специальными функциями TSQL.
  • Разрешены только символы, определенные в правилах.
0 голосов
/ 22 апреля 2009

Я нашел эту статью о создании функции для оценки регулярных выражений на TSQL, внутренне использует VBScript, посмотрите здесь

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

Другой идеей может быть обработка @parameter в качестве типа данных sysname, не знаю, подходит ли он сюда

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