Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Фильтр SQL — это один из доступных типов фильтров для подписок на разделы служебной шины. Это текстовое выражение, которое является эффективным для подмножества стандарта SQL-92. Выражения фильтра используются с элементом sqlExpression свойства sqlFilter в служебной шине Rule в шаблоне Azure Resource Manager или в аргументе --filter-sql-expression команды Azure CLI az servicebus topic subscription rule create, а также в нескольких функциях пакета SDK, которые позволяют управлять правилами подписки. Допустимые выражения показаны в этом разделе.
Служебная шина категории "Премиум" также поддерживает синтаксис селектора сообщений SQL JMS через API JMS 2.0.
<predicate ::=
{ NOT <predicate> }
| <predicate> AND <predicate>
| <predicate> OR <predicate>
| <expression> { = | <> | != | > | >= | < | <= } <expression>
| <property> IS [NOT] NULL
| <expression> [NOT] IN ( <expression> [, ...n] )
| <expression> [NOT] LIKE <pattern> [ESCAPE <escape_char>]
| EXISTS ( <property> )
| ( <predicate> )
<expression> ::=
<constant>
| <function>
| <property>
| <expression> { + | - | * | / | % } <expression>
| { + | - } <expression>
| ( <expression> )
<property> :=
[<scope> .] <property_name>
Аргументы
<scope>— необязательная строка, указывающая область<property_name>. Допустимые значения —sysилиuser.- Значение
sysуказывает системную область, где<property_name>— любое из свойств сообщения служебной шины, как описано в разделе Сообщения, полезные данные и сериализация. - Значение
userуказывает на область действия пользователя, где<property_name>— это ключ нAstraиваемых свойств, которые можно задать для сообщения при отправке в служебную шину. - Область
userявляется областью по умолчанию, если значение<scope>не указано.
- Значение
Замечания
Попытка доступа к несуществующему системном свойству является ошибкой, а попытка доступа к несуществующему свойству пользователя не является ошибкой. Вместо этого несуществующее свойство пользователя внутренне оценивается как неизвестное значение. Неизвестное значение обрабатывается особым образом во время вычисления оператора.
property_name
<property_name> ::=
<identifier>
| <delimited_identifier>
<identifier> ::=
<regular_identifier> | <quoted_identifier> | <delimited_identifier>
Аргументы
<regular_identifier> — строка, представленная следующим регулярным выражением:
[[:IsLetter:]][_[:IsLetter:][:IsDigit:]]*
Это любая строка, которая начинается с буквы, после которой идет один или несколько символов подчеркивания, букв или цифр.
[:IsLetter:] — любой символ Юникода, который относится к категории букв Юникода. System.Char.IsLetter(c) возвращает значение true, если c является буквой Юникода.
[:IsDigit:] — любой символ Юникода, который относится к категории десятичных цифр. System.Char.IsDigit(c) возвращает значение true, если c является цифрой Юникода.
<regular_identifier> не может быть зарезервированным ключевым словом.
<delimited_identifier> — любая строка, заключенная в квадратные скобки ([]). Закрывающая квадратная скобка представляется в виде двух закрывающих квадратных скобок. Ниже приведены примеры <delimited_identifier>.
[Property With Space]
[HR-EmployeeID]
<quoted_identifier> — любая строка, заключенная в двойные кавычки. Двойные кавычки в идентификаторе представляются в виде двух пар двойных кавычек. Мы не рекомендуем использовать заключенные в кавычки идентификаторы, так как их можно легко спутать со строковой константой. По возможности используйте идентификаторы с разделителем. Ниже приведен пример <quoted_identifier>.
"Contoso & Northwind"
pattern
<pattern> ::=
<expression>
Замечания
Свойство <pattern> должно быть выражением, которое будет вычисляться как строка. Оно используется в качестве шаблона для оператора LIKE. Оно может содержать следующие подстановочные знаки:
%— любая строка, содержащая ноль или более символов._— любой один символ.
escape_char
<escape_char> ::=
<expression>
Замечания
Свойство <escape_char> должно быть выражением, которое будет вычисляться в качестве строки с 1 символом. Оно используется в качестве escape-символа для оператора LIKE.
Например, property LIKE 'ABC\%' ESCAPE '\' соответствует ABC%, а не строке, начинающейся с ABC.
constant
<constant> ::=
<integer_constant> | <decimal_constant> | <approximate_number_constant> | <boolean_constant> | NULL
Аргументы
<integer_constant>— строка чисел без кавычек и десятичного разделителя. Значения хранятся в видеSystem.Int64внутри системы и попадают в тот же диапазон.Ниже приведены примеры длинных констант.
1894 2<decimal_constant>— строка чисел без кавычек и с десятичным разделителем. Значения хранятся в видеSystem.Doubleвнутри системы и попадают в тот же диапазон и точность.В следующих версиях это число может храниться в другом типе данных для обеспечения поддержки более точной числовой семантики. Поэтому не следует полагаться на тот факт, что базовым типом данных для
<decimal_constant>являетсяSystem.Double.Ниже приведены примеры констант типа decimal.
1894.1204 2.0<approximate_number_constant>— число, записанное в экспоненциальном представлении чисел. Значения хранятся в видеSystem.Doubleвнутри системы и попадают в тот же диапазон и точность. Ниже приведены примеры констант с приближенными числами.101.5E5 0.5E-2
boolean_constant
<boolean_constant> :=
TRUE | FALSE
Замечания
Логические константы представлены в виде ключевого слова TRUE или FALSE. Значения хранятся в виде System.Boolean.
string_constant
<string_constant>
Замечания
Строковые константы заключаются в одинарные кавычки и включают любые допустимые символы Юникода. Одинарная кавычка, внедренная в строковую константу, представляется в виде двух одинарных кавычек.
function
<function> :=
newid() |
property(name) | p(name)
Замечания
Функция newid() возвращает значение System.Guid, созданное методом System.Guid.NewGuid().
Функция property(name) возвращает значение свойства, на которое указывает name. В качестве значения name может использоваться любое допустимое выражение, возвращающее строковое значение.
Рекомендации
Рассмотрим следующую семантику Sql Filter:
В именах свойств не учитывается регистр.
Во всех сценариях операторы следуют семантике неявного преобразования C#.
Системные свойства — это любые свойства сообщения служебной шины, как описано в разделе Сообщения, полезные данные и сериализация.
Рассмотрим следующую семантику
IS [NOT] NULL:property IS NULLвозвращает значениеtrue, если свойство не существует или его значение равноnull.
Семантика оценки свойств
Попытка оценить несуществующее системное свойство вызывает
FilterExceptionисключение.Несуществующее свойство вычисляется внутри системы как неизвестное.
Вычисление неизвестного свойства в арифметических операторах:
Если левая и/или правая часть операнда вычисляется как неизвестная, то результат неизвестный (для бинарных операторов).
Если операнд вычисляется как неизвестный, то результат тоже неизвестный (для унарных операторов).
Неизвестный результат вычисления в двоичных операторах сравнения:
Если левая и/или правая часть операнда вычисляется как неизвестная, то результат неизвестный.
Неизвестный результат вычисления в
[NOT] LIKE:Если любой операнд вычисляется как неизвестный, то результат тоже неизвестный.
Неизвестный результат вычисления в
[NOT] IN:Если левый операнд вычисляется как неизвестный, то результат тоже неизвестный.
Неизвестный результат вычисления в операторе AND:
+---+---+---+---+
|AND| T | F | U |
+---+---+---+---+
| T | T | F | U |
+---+---+---+---+
| F | F | F | F |
+---+---+---+---+
| U | U | F | U |
+---+---+---+---+
Неизвестный результат вычисления в операторе OR:
+---+---+---+---+
|OR | T | F | U |
+---+---+---+---+
| T | T | T | T |
+---+---+---+---+
| F | T | F | U |
+---+---+---+---+
| U | T | U | U |
+---+---+---+---+
Семантика привязки операторов
Операторы сравнения, такие как
>,>=,<,<=,!=, и=следуют той же семантике, что и операторы C#: связываются повышения типов данных и неявные преобразования.Арифметические операторы, такие как
+,-,*,/и%следуют той же семантике, что и операторы C#: связываются повышения типов данных и неявные преобразования.
Примеры
Примеры см. в разделе Примеры фильтров служебной шины.