Sintassi di SQLFilterSQLFilter syntax

Un oggetto SqlFilter è un'istanza della classe SqlFilter e rappresenta un'espressione filtro basata sul linguaggio SQL che viene valutata in un oggetto BrokeredMessage.A SqlFilter object is an instance of the SqlFilter class, and represents a SQL language-based filter expression that is evaluated against a BrokeredMessage. Un SqlFilter supporta un sottoinsieme dello standard SQL-92.A SqlFilter supports a subset of the SQL-92 standard.

Questo argomento offre informazioni dettagliate sulla grammatica di SqlFilter.This topic lists details about SqlFilter grammar.

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

ArgomentiArguments

  • <scope> è una stringa facoltativa che indica l'ambito di <property_name>.<scope> is an optional string indicating the scope of the <property_name>. I valori validi sono sys o user.Valid values are sys or user. Il valore sys indica l'ambito del sistema. In questo caso, <property_name> sarà il nome di una proprietà pubblica della classe BrokeredMessage.The sys value indicates system scope where <property_name> is a public property name of the BrokeredMessage class. user indica l'ambito dell'utente. In questo caso, <property_name> sarà una chiave del dizionario della classe BrokeredMessage.user indicates user scope where <property_name> is a key of the BrokeredMessage class dictionary. Se l'argomento <scope> non è specificato, l'ambito predefinito è user.user scope is the default scope if <scope> is not specified.

OsservazioniRemarks

Il tentativo di accedere a una proprietà di sistema inesistente costituisce un errore, mentre il tentativo di accedere a una proprietà utente inesistente non è un errore.An attempt to access a non-existent system property is an error, while an attempt to access a non-existent user property is not an error. Una proprietà utente inesistente viene invece valutata internamente come valore sconosciuto.Instead, a non-existent user property is internally evaluated as an unknown value. Un valore sconosciuto viene gestito in modo speciale durante la valutazione degli operatori.An unknown value is treated specially during operator evaluation.

property_nameproperty_name

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

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

ArgomentiArguments

<regular_identifier> è una stringa rappresentata dall'espressione regolare seguente:<regular_identifier> is a string represented by the following regular expression:

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

L'espressione corrisponde a qualsiasi stringa che inizia con una lettera seguita da uno o più caratteri di sottolineatura/lettere/cifre.This grammar means any string that starts with a letter and is followed by one or more underscore/letter/digit.

[:IsLetter:] indica qualsiasi carattere Unicode classificato come lettera Unicode.[:IsLetter:] means any Unicode character that is categorized as a Unicode letter. System.Char.IsLetter(c) restituisce true se c è una lettera Unicode.System.Char.IsLetter(c) returns true if c is a Unicode letter.

[:IsDigit:] indica qualsiasi carattere Unicode classificato come cifra decimale.[:IsDigit:] means any Unicode character that is categorized as a decimal digit. System.Char.IsDigit(c) restituisce true se c è una cifra Unicode.System.Char.IsDigit(c) returns true if c is a Unicode digit.

<regular_identifier> non può essere una parola chiave riservata.A <regular_identifier> cannot be a reserved keyword.

<delimited_identifier> è qualsiasi stringa racchiusa tra parentesi quadra aperta e parentesi quadra chiusa ([]).<delimited_identifier> is any string that is enclosed with left/right square brackets ([]). Una parentesi quadra chiusa è rappresentata con due parentesi quadre chiuse.A right square bracket is represented as two right square brackets. Di seguito sono riportati esempi di <delimited_identifier>:The following are examples of <delimited_identifier>:

[Property With Space]  
[HR-EmployeeID]  

<quoted_identifier> è qualsiasi stringa racchiusa tra virgolette doppie.<quoted_identifier> is any string that is enclosed with double quotation marks. Le virgolette doppie nell'identificatore sono rappresentate con due virgolette doppie.A double quotation mark in identifier is represented as two double quotation marks. Non è consigliabile usare identificatori racchiusi tra virgolette perché possono essere facilmente confusi con una costante di tipo stringa.It is not recommended to use quoted identifiers because it can easily be confused with a string constant. Usare se possibile un identificatore delimitato.Use a delimited identifier if possible. Di seguito è riportato un esempio di <quoted_identifier>:The following is an example of <quoted_identifier>:

"Contoso & Northwind"  

patternpattern

<pattern> ::=  
      <expression>  

OsservazioniRemarks

<pattern> deve essere un'espressione valutata come stringa.<pattern> must be an expression that is evaluated as a string. Viene usato come modello per l'operatore LIKEIt is used as a pattern for the LIKE operator. e può contenere i caratteri jolly seguenti.It can contain the following wildcard characters:

  • %: qualsiasi stringa di zero o più caratteri.%: Any string of zero or more characters.

  • _: qualsiasi carattere singolo._: Any single character.

escape_charescape_char

<escape_char> ::=  
      <expression>  

OsservazioniRemarks

<escape_char> deve essere un'espressione valutata come stringa di lunghezza 1.<escape_char> must be an expression that is evaluated as a string of length 1. Viene usato come carattere di escape per l'operatore LIKE.It is used as an escape character for the LIKE operator.

Ad esempio, property LIKE 'ABC\%' ESCAPE '\' corrisponde a ABC% anziché a una stringa che inizia con ABC.For example, property LIKE 'ABC\%' ESCAPE '\' matches ABC% rather than a string that starts with ABC.

costanteconstant

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

ArgomentiArguments

  • <integer_constant> è una stringa di numeri non racchiusi tra virgolette e non contenenti separatori decimali.<integer_constant> is a string of numbers that are not enclosed in quotation marks and do not contain decimal points. I valori sono archiviati internamente come System.Int64 e seguono lo stesso intervallo.The values are stored as System.Int64 internally, and follow the same range.

    Questi sono esempi di costanti di tipo long:These are examples of long constants:

    1894  
    2  
    
  • <decimal_constant> è una stringa di numeri non racchiusi tra virgolette e contenente un separatore decimale.<decimal_constant> is a string of numbers that are not enclosed in quotation marks, and contain a decimal point. I valori sono archiviati internamente come System.Double e seguono lo stesso intervallo e la stessa precisione.The values are stored as System.Double internally, and follow the same range/precision.

    In una versione futura, questo numero potrebbe essere archiviato in un tipo di dati diverso per supportare una semantica numerica esatta e non dover quindi fare affidamento sul fatto che il tipo di dati sottostante per <decimal_constant> sia System.Double.In a future version, this number might be stored in a different data type to support exact number semantics, so you should not rely on the fact the underlying data type is System.Double for <decimal_constant>.

    Di seguito sono riportati esempi di costanti decimali:The following are examples of decimal constants:

    1894.1204  
    2.0  
    
  • <approximate_number_constant> è un numero scritto in notazione scientifica.<approximate_number_constant> is a number written in scientific notation. I valori sono archiviati internamente come System.Double e seguono lo stesso intervallo e la stessa precisione.The values are stored as System.Double internally, and follow the same range/precision. Di seguito sono riportati esempi di costanti numeriche approssimative:The following are examples of approximate number constants:

    101.5E5  
    0.5E-2  
    

boolean_constantboolean_constant

<boolean_constant> :=  
      TRUE | FALSE  

OsservazioniRemarks

Le costanti booleane sono rappresentate dalle parole chiave TRUE e FALSE.Boolean constants are represented by the keywords TRUE or FALSE. I valori sono archiviati come System.Boolean.The values are stored as System.Boolean.

string_constantstring_constant

<string_constant>  

OsservazioniRemarks

Le costanti di tipo stringa sono racchiuse tra virgolette singole e includono qualsiasi carattere Unicode valido.String constants are enclosed in single quotation marks and include any valid Unicode characters. Le virgolette singole incorporate in una costante di tipo stringa sono rappresentate con due virgolette singole.A single quotation mark embedded in a string constant is represented as two single quotation marks.

funzionefunction

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

OsservazioniRemarks

La funzione newid() restituisce un System.Guid generato dal metodo System.Guid.NewGuid().The newid() function returns a System.Guid generated by the System.Guid.NewGuid() method.

La funzione property(name) restituisce il valore della proprietà a cui viene fatto riferimento con name.The property(name) function returns the value of the property referenced by name. Il valore di name può essere qualsiasi espressione valida che restituisce un valore stringa.The name value can be any valid expression that returns a string value.

ConsiderazioniConsiderations

Tenere presente la semantica di SqlFilter seguente:Consider the following SqlFilter semantics:

  • Nei nomi delle proprietà non viene fatta distinzione tra maiuscole e minuscole.Property names are case-insensitive.

  • Gli operatori seguono la semantica di conversione implicita C#, quando possibile.Operators follow C# implicit conversion semantics whenever possible.

  • Le proprietà di sistema sono proprietà pubbliche esposte in istanze di BrokeredMessage.System properties are public properties exposed in BrokeredMessage instances.

    Tenere presente la semantica di IS [NOT] NULL seguente:Consider the following IS [NOT] NULL semantics:

    • property IS NULL viene valutato come true se la proprietà non esiste o se il valore della proprietà è null.property IS NULL is evaluated as true if either the property doesn't exist or the property's value is null.

Semantica di valutazione delle proprietàProperty evaluation semantics

  • Il tentativo di valutare una proprietà di sistema inesistente genera un'eccezione FilterException.An attempt to evaluate a non-existent system property throws a FilterException exception.

  • Una proprietà non esistente verrà valutata internamente come valore sconosciuto.A property that does not exist is internally evaluated as unknown.

    Valutazione dei valori sconosciuti negli operatori aritmetici:Unknown evaluation in arithmetic operators:

  • Per gli operatori binari, se il lato sinistro e/o destro degli operandi viene valutato come valore sconosciuto, il risultato è un valore sconosciuto.For binary operators, if either the left and/or right side of operands is evaluated as unknown, then the result is unknown.

  • Per gli operatori unari, se un operando viene valutato come valore sconosciuto, il risultato è un valore sconosciuto.For unary operators, if an operand is evaluated as unknown, then the result is unknown.

    Valutazione dei valori sconosciuti negli operatori di confronto binari:Unknown evaluation in binary comparison operators:

  • Se il lato sinistro e/o destro degli operandi viene valutato come valore sconosciuto, il risultato è un valore sconosciuto.If either the left and/or right side of operands is evaluated as unknown, then the result is unknown.

    Valutazione dei valori sconosciuti in [NOT] LIKE:Unknown evaluation in [NOT] LIKE:

  • Se qualsiasi operando viene valutato come valore sconosciuto, il risultato è un valore sconosciuto.If any operand is evaluated as unknown, then the result is unknown.

    Valutazione dei valori sconosciuti in [NOT] IN:Unknown evaluation in [NOT] IN:

  • Se l'operando di sinistra viene valutato come valore sconosciuto, il risultato è un valore sconosciuto.If the left operand is evaluated as unknown, then the result is unknown.

    Valutazione dei valori sconosciuti nell'operatore AND:Unknown evaluation in AND operator:

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

Valutazione dei valori sconosciuti nell'operatore OR:Unknown evaluation in OR operator:

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

Semantica di binding degli operatoriOperator binding semantics

  • 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.Comparison operators such as >, >=, <, <=, !=, and = follow the same semantics as the C# operator binding in data type promotions and implicit conversions.

  • Gli operatori aritmetici come +, -, *, / e % seguono la stessa semantica dell'associazione di operatori C# nelle conversioni implicite e nelle promozioni del tipo di dati.Arithmetic operators such as +, -, *, /, and % follow the same semantics as the C# operator binding in data type promotions and implicit conversions.

Passaggi successiviNext steps