Sintassi del filtro SQL della regola di sottoscrizione

Un filtro SQL è uno dei tipi di filtro disponibili per le sottoscrizioni di argomenti bus di servizio. Si tratta di un'espressione di testo che si appoggia a un subset dello standard SQL-92. Le espressioni di filtro vengono usate con l'elemento sqlExpression della proprietà "sqlFilter" di un bus di servizio Rule in un modello di Azure Resource Manager o con l'argomento del comando dell'interfaccia della riga di comando di --filter-sql-expression Azure az servicebus topic subscription rule create e diverse funzioni SDK che consentono la gestione delle regole di sottoscrizione. Le espressioni consentite sono illustrate in questa sezione.

bus di servizio Premium supporta ancheSintassi del selettore di messaggi SQL di JMS tramite l'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>  
  

Argomenti

  • <scope> è una stringa facoltativa che indica l'ambito di <property_name>. I valori validi sono sys o user.
    • Il sys valore indica l'ambito di sistema in cui <property_name> è una delle proprietà del messaggio bus di servizio come descritto in Messaggi, payload e serializzazione.
    • Il user valore indica l'ambito utente in cui <property_name> è una chiave delle proprietà personalizzate che è possibile impostare sul messaggio quando si invia a bus di servizio.
    • L'ambito user è l'ambito predefinito se <scope> non è specificato.

Osservazioni

Un tentativo di accesso a una proprietà di sistema inesistente è un errore, mentre un tentativo di accesso a una proprietà utente inesistente non è un errore. Una proprietà utente inesistente viene invece valutata internamente come valore sconosciuto. Un valore sconosciuto viene gestito in modo speciale durante la valutazione degli operatori.

property_name

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

Argomenti

<regular_identifier> è una stringa rappresentata dall'espressione regolare seguente:

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

L'espressione corrisponde a qualsiasi stringa che inizia con una lettera seguita da uno o più caratteri di sottolineatura/lettere/cifre.

[:IsLetter:] indica qualsiasi carattere Unicode classificato come lettera Unicode. System.Char.IsLetter(c) restituisce true se c è una lettera Unicode.

[:IsDigit:] indica qualsiasi carattere Unicode classificato come cifra decimale. System.Char.IsDigit(c) restituisce true se c è una cifra Unicode.

Un <regular_identifier> oggetto non può essere una parola chiave riservata.

<delimited_identifier> è qualsiasi stringa racchiusa tra parentesi quadra aperta e parentesi quadra chiusa ([]). Una parentesi quadra chiusa è rappresentata con due parentesi quadre chiuse. Di seguito sono riportati esempi di <delimited_identifier>:

[Property With Space]  
[HR-EmployeeID]  
  

<quoted_identifier> è qualsiasi stringa racchiusa tra virgolette doppie. Le virgolette doppie nell'identificatore sono rappresentate con due virgolette doppie. Non è consigliabile usare identificatori tra virgolette perché può essere facilmente confusa con una costante stringa. Usare se possibile un identificatore delimitato. Ecco un esempio di <quoted_identifier>:

"Contoso & Northwind"  

pattern

<pattern> ::=  
      <expression>  

Osservazioni

<pattern> deve essere un'espressione valutata come stringa. Viene usato come modello per l'operatore LIKE. e può contenere i caratteri jolly seguenti.

  • %: qualsiasi stringa di zero o più caratteri.

  • _: qualsiasi carattere singolo.

escape_char

<escape_char> ::=  
      <expression>  

Osservazioni

<escape_char> deve essere un'espressione valutata come stringa di lunghezza 1. Viene usato come carattere di escape per l'operatore LIKE.

Ad esempio, property LIKE 'ABC\%' ESCAPE '\' corrisponde a ABC% anziché a una stringa che inizia con ABC.

constant

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

Argomenti

  • <integer_constant> è una stringa di numeri che non sono racchiusi tra virgolette e non contengono punti decimali. I valori sono archiviati internamente come System.Int64 e seguono lo stesso intervallo.

    Ecco alcuni esempi di costanti lunghe:

    1894  
    2  
    
  • <decimal_constant> è una stringa di numeri che non sono racchiusi tra virgolette e che contengono un separatore decimale. I valori sono archiviati internamente come System.Double e seguono lo stesso intervallo e la stessa precisione.

    In una versione futura, questo numero potrebbe essere archiviato in un tipo di dati diverso per supportare la semantica dei numeri esatta, pertanto non è consigliabile basarsi sul fatto che il tipo di dati sottostante sia System.Double per <decimal_constant>.

    Di seguito sono riportati esempi di costanti decimal:

    1894.1204  
    2.0  
    
  • <approximate_number_constant> è un numero scritto in notazione scientifica. I valori sono archiviati internamente come System.Double e seguono lo stesso intervallo e la stessa precisione. Di seguito sono riportati esempi di costanti numeriche approssimative:

    101.5E5  
    0.5E-2  
    

boolean_constant

<boolean_constant> :=  
      TRUE | FALSE  

Osservazioni

Le costanti booleane sono rappresentate dalle parole chiave TRUE e FALSE. I valori sono archiviati come System.Boolean.

string_constant

<string_constant>  

Osservazioni

Le costanti di tipo stringa sono racchiuse tra virgolette singole e includono qualsiasi carattere Unicode valido. Le virgolette singole incorporate in una costante di tipo stringa sono rappresentate con due virgolette singole.

funzione

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

Osservazioni

La newid() funzione restituisce un System.Guid oggetto generato dal System.Guid.NewGuid() metodo .

La funzione property(name) restituisce il valore della proprietà a cui viene fatto riferimento con name. Il valore di name può essere qualsiasi espressione valida che restituisce un valore stringa.

Considerazioni

Si consideri la semantica del filtro SQL seguente:

  • Nei nomi delle proprietà non viene fatta distinzione tra maiuscole e minuscole.

  • Gli operatori seguono la semantica di conversione implicita C#, quando possibile.

  • Le proprietà di sistema sono una delle proprietà del messaggio bus di servizio come descritto in Messaggi, payload e serializzazione.

    Tenere presente la semantica di IS [NOT] NULL seguente:

    • property IS NULL viene valutato come true se la proprietà non esiste o se il valore della proprietà è null.

Semantica di valutazione delle proprietà

  • Un tentativo di valutare una proprietà di sistema inesistente genera un'eccezione FilterException .

  • Una proprietà che non esiste viene valutata internamente come sconosciuta.

    Valutazione dei valori sconosciuti negli operatori aritmetici:

  • Per gli operatori binari, se il lato sinistro o destro degli operandi viene valutato come sconosciuto, il risultato è sconosciuto.

  • Per gli operatori unari, se un operando viene valutato come valore sconosciuto, il risultato è un valore sconosciuto.

    Valutazione dei valori sconosciuti negli operatori di confronto binari:

  • Se il lato sinistro o destro degli operandi viene valutato come sconosciuto, il risultato è sconosciuto.

    Valutazione dei valori sconosciuti in [NOT] LIKE:

  • Se qualsiasi operando viene valutato come valore sconosciuto, il risultato è un valore sconosciuto.

    Valutazione dei valori sconosciuti in [NOT] IN:

  • Se l'operando di sinistra viene valutato come valore sconosciuto, il risultato è un valore sconosciuto.

    Valutazione dei valori sconosciuti nell'operatore AND:

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

Valutazione dei valori sconosciuti nell'operatore OR:

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

Semantica di binding degli operatori

  • Gli operatori di confronto come >, >=, <, <=, != e = seguono la stessa semantica dell'associazione di operatori C# nelle conversioni implicite e nelle promozioni del tipo di dati.

  • Gli operatori aritmetici come +, -, *, / e % seguono la stessa semantica dell'associazione di operatori C# nelle conversioni implicite e nelle promozioni del tipo di dati.

Esempi

Per esempi, vedere esempi di filtro bus di servizio.

Passaggi successivi