Compartir por


Sintaxis de filtros de SQL de regla de suscripción

Un filtro de SQL es uno de los tipos de filtro disponibles para las suscripciones a tema de Service Bus. Es una expresión de texto que depende de un subconjunto del estándar SQL-92. Las expresiones de filtro se usan con el elemento sqlExpression de la propiedad "sqlFilter" de una Rule de Service Bus en una plantilla de Resource Manager, o con el argumento --filter-sql-expression del comando az servicebus topic subscription rule create de la CLI de Azure y varias funciones de SDK que permiten administrar reglas de suscripción. Las expresiones permitidas se muestran en esta sección.

Service Bus Premium también es compatible con la sintaxis de selector de mensajes SQL de JMS a través de la API 2.0 de JMS.

<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>  
  

Argumentos

  • <scope> es una cadena opcional que indica el ámbito de <property_name>. Los valores válidos son sys y user.
    • El valor sys indica el ámbito del sistema, donde <property_name> es cualquiera de las propiedades del mensaje de Service Bus, como se describe en Mensajes, cargas y serialización.
    • El valor user indica el ámbito de usuario, donde <property_name> es una clave de las propiedades personalizadas que puede establecer en el mensaje al enviarlo a Service Bus.
    • El ámbito user es el predeterminado si no se especifica <scope>.

Comentarios

Un intento de acceso a una propiedad de sistema que no existe es un error, mientras que uno a una propiedad de usuario inexistente, no lo es. En su lugar, una propiedad de usuario inexistente internamente se evalúa como un valor desconocido. Un valor desconocido se trata de una forma especial durante la evaluación de operador.

property_name

<property_name> ::=  
     <identifier>  
     | <delimited_identifier>  
  
<identifier> ::=  
     <regular_identifier> | <quoted_identifier> | <delimited_identifier>  
  

Argumentos

<regular_identifier> es una cadena que se representa mediante la siguiente expresión regular:

[[:IsLetter:]][_[:IsLetter:][:IsDigit:]]*  

Esta gramática significa cualquier cadena que empiece por una letra y vaya seguida de uno o varios dígitos, letras o guiones bajo.

[:IsLetter:] significa cualquier carácter Unicode que se clasifica como una letra Unicode. System.Char.IsLetter(c) devuelve true si c es una letra Unicode.

[:IsDigit:] significa cualquier carácter Unicode que se clasifica como un dígito Unicode. System.Char.IsDigit(c) devuelve true si c es un dígito Unicode.

<regular_identifier> no puede ser una palabra clave reservada.

<delimited_identifier> es cualquier cadena que se incluye con corchetes izquierdos y derechos ([]). Un corchete derecho se representan como dos corchetes derechos. A continuación, se muestran ejemplos de <delimited_identifier>:

[Property With Space]  
[HR-EmployeeID]  
  

<quoted_identifier> es cualquier cadena que se incluye entre comillas dobles. Las comillas dobles en el identificador se representan como dos comillas dobles. No se recomienda usar identificadores entre comillas, ya que pueden confundirse fácilmente con una constante de cadena. Si es posible, utilice un identificador delimitado. Este es un ejemplo de <quoted_identifier>:

"Contoso & Northwind"  

pattern

<pattern> ::=  
      <expression>  

Comentarios

<pattern> debe ser una expresión que se evalúa como una cadena. Se usa como patrón para el operador LIKE. Puede contener los siguientes caracteres comodín:

  • %:Cualquier cadena de cero o más caracteres.

  • _: cualquier carácter individual.

escape_char

<escape_char> ::=  
      <expression>  

Comentarios

<escape_char> debe ser una expresión que se evalúa como una cadena de longitud 1. Se usa como carácter de escape para el operador LIKE.

Por ejemplo, property LIKE 'ABC\%' ESCAPE '\' coincide con ABC%, en lugar de con una cadena que comienza con ABC.

constant

<constant> ::=  
      <integer_constant> | <decimal_constant> | <approximate_number_constant> | <boolean_constant> | NULL  

Argumentos

  • <integer_constant> es una cadena de números que no se incluye entre comillas y no contiene decimales. Los valores se almacenan como System.Int64 internamente y siguen el mismo intervalo.

    Los siguientes son ejemplos de constantes largas:

    1894  
    2  
    
  • <decimal_constant> es una cadena de números que no se incluye entre comillas y contiene un separador decimal. Los valores se almacenan como System.Double internamente y siguen el mismo intervalo o la misma precisión.

    En una versión futura, este número podría almacenarse en un tipo de datos diferente para admitir la semántica de número exacto. Por lo tanto, no debe confiar en el hecho de que el tipo de datos subyacente es System.Double en <decimal_constant>.

    A continuación, se muestran ejemplos de constantes decimales:

    1894.1204  
    2.0  
    
  • <approximate_number_constant> es un número escrito en la notación científica. Los valores se almacenan como System.Double internamente y siguen el mismo intervalo o la misma precisión. A continuación, se muestran ejemplos de constantes de número aproximado:

    101.5E5  
    0.5E-2  
    

boolean_constant

<boolean_constant> :=  
      TRUE | FALSE  

Comentarios

Las constantes booleanas se representan mediante las palabras clave TRUE o FALSE. Los valores se almacenan como System.Boolean.

string_constant

<string_constant>  

Comentarios

Las constantes de cadena se incluyen entre comillas simples y contienen caracteres Unicode válidos. Una comilla simple incrustada en una constante de cadena se representan como dos comillas simples.

function

<function> :=  
      newid() |  
      property(name) | p(name)  

Comentarios

La función newid() devuelve un elemento System.Guid generado por el método System.Guid.NewGuid().

La función property(name) devuelve el valor de la propiedad a la que hace referencia name. El valor name puede ser cualquier expresión válida que devuelve un valor de cadena.

Consideraciones

Tenga en cuenta la siguiente semántica de Sql Filter:

  • Los nombres de propiedad distinguen entre mayúsculas y minúsculas.

  • Los operadores siguen la semántica de conversión implícita de C# siempre que sea posible.

  • Las propiedades del sistema son cualquiera de las propiedades del mensaje de Service Bus, como se describe en Mensajes, cargas y serialización.

    Tenga en cuenta la siguiente semántica de IS [NOT] NULL:

    • property IS NULL se evalúa como true si no existe la propiedad o valor de la propiedad es null.

Semántica de evaluación de propiedades

  • Un intento de evaluar una propiedad no existente del sistema genera una excepción FilterException.

  • Una propiedad que no existe se evalúa internamente como valor desconocido.

    Evaluación desconocida en operadores aritméticos:

  • Para los operadores binarios, si la parte izquierda o derecha de los operandos se evalúa como valor desconocido, el resultado será desconocido.

  • Para los operadores unarios, si un operando se evalúa como desconocido, el resultado será desconocido.

    Evaluación desconocida en los operadores de comparación binaria:

  • Si la parte izquierda o derecha de los operandos se evalúa como valor desconocido, el resultado será desconocido.

    Evaluación desconocida en [NOT] LIKE:

  • Si cualquier operando se evalúa como desconocido, el resultado es desconocido.

    Evaluación desconocida en [NOT] IN:

  • Si el operando izquierdo se evalúa como desconocido, el resultado es desconocido.

    Evaluación desconocida en el operador AND:

+---+---+---+---+  
|AND| T | F | U |  
+---+---+---+---+  
| T | T | F | U |  
+---+---+---+---+  
| F | F | F | F |  
+---+---+---+---+  
| U | U | F | U |  
+---+---+---+---+  

Evaluación desconocida en el operador OR:

+---+---+---+---+  
|OR | T | F | U |  
+---+---+---+---+  
| T | T | T | T |  
+---+---+---+---+  
| F | T | F | U |  
+---+---+---+---+  
| U | T | U | U |  
+---+---+---+---+  

Semántica de enlace de operadores

  • Los operadores de comparación, como >, >=, <, <=, != y =, siguen la misma semántica que el enlace de operadores de C# en promociones de tipo de datos y conversiones implícitas.

  • Los operadores aritméticos, como +, -, *, / y %, siguen la misma semántica que el enlace de operadores de C# en promociones de tipo de datos y conversiones implícitas.

Ejemplos

Para obtener ejemplos, consulte Ejemplos de filtros de Service Bus.

Pasos siguientes