Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Проверить идентификатор (параметр) MSSQL в .NET или регулярном выражении

Автор вопроса: Bart VerkoeijenОтветов: 2

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

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

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

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

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

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

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

  • Вы пытаетесь разобрать SQL из какого-либо приложения или хотите после этого запустить инструкцию SQL? gbn 22.04.2009

sql-serverregextsql

Ответы

Ответ 1 · рейтинг 7 · Bart Verkoeijen

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

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

Это заставляет:

  • Идентификатор всегда начинается с @, что делает его параметром.
  • Отсутствие @ во второй позиции позволяет избежать путаницы со специальными функциями TSQL.
  • Допускает только символы, определенные в правилах.

Ответ 2 · Jhonny D. Cano -Leftware-

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы