Partilhar via


Sintaxe do Filtro SQL da Regra de Subscrição

Um filtro SQL é um dos tipos de filtro disponíveis para assinaturas de tópico do Service Bus. É uma expressão de texto que se apoia em um subconjunto do padrão SQL-92. As expressões de filtro são usadas com o sqlExpression elemento da propriedade 'sqlFilter' de um Service Bus Rule em um modelo do Azure Resource Manager, ou o argumento do comando da CLI az servicebus topic subscription rule create do Azure, e várias funções do --filter-sql-expression SDK que permitem gerenciar regras de assinatura. As expressões permitidas são mostradas nesta seção.

O Service Bus Premium também suporta a sintaxe do seletor de mensagens JMS SQL por meio da 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>  
  

Argumentos

  • <scope> é uma cadeia de caracteres opcional que indica o escopo do <property_name>. Os valores válidos são sys ou user.
    • O sys valor indica o escopo do sistema, onde <property_name> está qualquer uma das propriedades na mensagem do Service Bus, conforme descrito em Mensagens, cargas úteis e serialização.
    • O user valor indica o escopo do usuário onde <property_name> é uma chave das propriedades personalizadas que você pode definir na mensagem ao enviar para o Service Bus.
    • O user escopo é o escopo padrão se <scope> não for especificado.

Observações

Uma tentativa de acessar uma propriedade de sistema inexistente é um erro, enquanto uma tentativa de acessar uma propriedade de usuário inexistente não é um erro. Em vez disso, uma propriedade de usuário inexistente é avaliada internamente como um valor desconhecido. Um valor desconhecido é tratado especialmente durante a avaliação do operador.

property_name

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

Argumentos

<regular_identifier> é uma cadeia de caracteres representada pela seguinte expressão regular:

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

Esta gramática significa qualquer cadeia de caracteres que começa com uma letra e é seguida por um ou mais sublinhados/letras/dígitos.

[:IsLetter:] significa qualquer caractere Unicode que é categorizado como uma letra Unicode. System.Char.IsLetter(c) retorna true se c é uma letra Unicode.

[:IsDigit:] significa qualquer caractere Unicode categorizado como um dígito decimal. System.Char.IsDigit(c) retorna true se c for um dígito Unicode.

A <regular_identifier> não pode ser uma palavra-chave reservada.

<delimited_identifier> é qualquer cadeia de caracteres entre colchetes esquerdo/direito ([]). Um colchete direito é representado como dois colchetes direitos. Seguem-se exemplos de <delimited_identifier>:

[Property With Space]  
[HR-EmployeeID]  
  

<quoted_identifier> é qualquer cadeia de caracteres entre aspas duplas. Uma aspa dupla no identificador é representada como duas aspas duplas. Não é recomendado usar identificadores entre aspas porque pode ser facilmente confundido com uma constante de cadeia de caracteres. Use um identificador delimitado, se possível. Aqui está um exemplo de <quoted_identifier>:

"Contoso & Northwind"  

pattern

<pattern> ::=  
      <expression>  

Observações

<pattern> deve ser uma expressão avaliada como uma cadeia de caracteres. É usado como um padrão para o operador LIKE. Ele pode conter os seguintes caracteres curinga:

  • %: Qualquer cadeia de caracteres de zero ou mais caracteres.

  • _: Qualquer caractere único.

escape_char

<escape_char> ::=  
      <expression>  

Observações

<escape_char> deve ser uma expressão avaliada como uma cadeia de caracteres de comprimento 1. É usado como um personagem de escape para o operador LIKE.

Por exemplo, property LIKE 'ABC\%' ESCAPE '\' corresponde ABC% em vez de uma cadeia de caracteres que começa com ABC.

constante

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

Argumentos

  • <integer_constant> é uma cadeia de números que não estão entre aspas e não contêm pontos decimais. Os valores são armazenados internamente System.Int64 e seguem o mesmo intervalo.

    Aqui estão exemplos de constantes longas:

    1894  
    2  
    
  • <decimal_constant> é uma cadeia de números que não estão entre aspas e contêm um ponto decimal. Os valores são armazenados internamente System.Double e seguem o mesmo intervalo/precisão.

    Em uma versão futura, esse número pode ser armazenado em um tipo de dados diferente para oferecer suporte à semântica de número exato, portanto, você não deve confiar no fato de que o tipo de dados subjacente é System.Double para <decimal_constant>.

    Seguem-se exemplos de constantes decimais:

    1894.1204  
    2.0  
    
  • <approximate_number_constant> é um número escrito em notação científica. Os valores são armazenados internamente System.Double e seguem o mesmo intervalo/precisão. Seguem-se exemplos de constantes numéricas aproximadas:

    101.5E5  
    0.5E-2  
    

boolean_constant

<boolean_constant> :=  
      TRUE | FALSE  

Observações

As constantes booleanas são representadas pelas palavras-chave TRUE ou FALSE. Os valores são armazenados como System.Boolean.

string_constant

<string_constant>  

Observações

As constantes de cadeia de caracteres são colocadas entre aspas simples e incluem todos os caracteres Unicode válidos. Uma única aspa incorporada em uma constante de cadeia de caracteres é representada como duas aspas simples.

function

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

Observações

A newid() função retorna um System.Guid gerado pelo System.Guid.NewGuid() método.

A property(name) função retorna o valor da propriedade referenciada por name. O name valor pode ser qualquer expressão válida que retorna um valor de cadeia de caracteres.

Considerações

Considere a seguinte semântica do Filtro SQL:

  • Os nomes de propriedade não diferenciam maiúsculas de minúsculas.

  • Os operadores seguem a semântica de conversão implícita em C# sempre que possível.

  • As propriedades do sistema são qualquer uma das propriedades na mensagem do Service Bus, conforme descrito em Mensagens, cargas úteis e serialização.

    Considere a seguinte IS [NOT] NULL semântica:

    • property IS NULL é avaliado como true se a propriedade não existisse ou o valor da propriedade fosse null.

Semântica de avaliação de propriedades

  • Uma tentativa de avaliar uma propriedade de sistema inexistente gera uma FilterException exceção.

  • Uma propriedade que não existe é avaliada internamente como desconhecida.

    Avaliação desconhecida em operadores aritméticos:

  • Para operadores binários, se o lado esquerdo ou direito dos operandos for avaliado como desconhecido, o resultado será desconhecido.

  • Para operadores unários, se um operando é avaliado como desconhecido, o resultado é desconhecido.

    Avaliação desconhecida em operadores de comparação binária:

  • Se o lado esquerdo ou direito dos operandos for avaliado como desconhecido, então o resultado é desconhecido.

    Avaliação desconhecida em [NOT] LIKE:

  • Se qualquer operando for avaliado como desconhecido, o resultado será desconhecido.

    Avaliação desconhecida em [NOT] IN:

  • Se o operando esquerdo for avaliado como desconhecido, o resultado será desconhecido.

    Avaliação desconhecida no operador AND :

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

Avaliação desconhecida no operador OR :

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

Semântica de vinculação do operador

  • Os operadores de comparação como >, , , , >=<=<, !=e seguem a mesma semântica que a ligação do operador C# em promoções de tipo de dados e = conversões implícitas.

  • Os operadores aritméticos como +, , , -*, /e seguem a mesma semântica que a ligação do operador C# em promoções de tipo de dados e % conversões implícitas.

Exemplos

Para obter exemplos, consulte Exemplos de filtro do Service Bus.

Próximos passos