Sintassi di SQLRuleActionSQLRuleAction syntax

SqlRuleAction è un'istanza della classe SqlRuleAction e rappresenta un set di azioni scritto in una sintassi basata sul linguaggio SQL ed eseguito su una classe BrokeredMessage.A SqlRuleAction is an instance of the SqlRuleAction class, and represents set of actions written in SQL-language based syntax that is performed against a BrokeredMessage.

Questo articolo offre informazioni dettagliate sulla grammatica delle azioni regola SQL.This article lists details about the SQL rule action grammar.

<statements> ::=
    <statement> [, ...n]  
<statement> ::=
    <action> [;]
    Remarks
    -------
    Semicolon is optional.  
<action> ::=
    SET <property> = <expression>
    REMOVE <property>  
<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 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.

    Di seguito sono riportati esempi di costanti di tipo long:The following 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

  • L'azione SET viene usata per creare una nuova proprietà o aggiornare il valore di una proprietà esistente.SET is used to create a new property or update the value of an existing property.
  • L'azione REMOVE viene usata per rimuovere una proprietà.REMOVE is used to remove a property.
  • SET esegue la conversione implicita, se possibile, quando il tipo dell'espressione e il tipo della proprietà esistente sono diversi.SET performs implicit conversion if possible when the expression type and the existing property type are different.
  • Se viene fatto riferimento a proprietà di sistema inesistenti, l'azione ha esito negativo.Action fails if non-existent system properties were referenced.
  • L'azione non ha invece esito negativo se viene fatto riferimento a proprietà utente inesistenti.Action does not fail if non-existent user properties were referenced.
  • Una proprietà utente inesistente viene valutata internamente come valore sconosciuto, seguendo la stessa semantica di SQLFilter nella valutazione degli operatori.A non-existent user property is evaluated as "Unknown" internally, following the same semantics as SQLFilter when evaluating operators.

Passaggi successiviNext steps