Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Gli identificatori vengono usati in Entity SQL per rappresentare alias di espressione di query, riferimenti a variabili, proprietà di oggetti, funzioni e così via. Entity SQL fornisce due tipi di identificatori: identificatori semplici e identificatori tra virgolette.
Identificatori semplici
Un identificatore semplice in Entity SQL è una sequenza di caratteri alfanumerici e di caratteri di sottolineatura. Il primo carattere dell'identificatore deve essere un carattere alfabetico (a-z o A-Z).
Identificatori delimitati
Un identificatore tra virgolette è qualsiasi sequenza di caratteri racchiusi tra parentesi quadre ([]). Gli identificatori delimitati consentono di specificare gli identificatori con caratteri non validi negli identificatori. Tutti i caratteri tra parentesi quadre diventano parte dell'identificatore, inclusi tutti gli spazi vuoti.
Un identificatore tra virgolette non può includere i caratteri seguenti:
Newline.
Ritorni.
Schede.
Backspace.
Parentesi quadre aggiuntive, ovvero parentesi quadre all'interno delle parentesi quadre che delineano l'identificatore.
Un identificatore tra virgolette può includere caratteri Unicode.
Gli identificatori delimitati consentono di creare caratteri di nome proprietà non validi negli identificatori, come illustrato nell'esempio seguente:
SELECT c.ContactName AS [Contact Name] FROM customers AS c
È anche possibile usare identificatori tra virgolette per specificare un identificatore che è una parola chiave riservata di Entity SQL. Ad esempio, se il tipo Email ha una proprietà denominata "From", è possibile disambiguarla dalla parola chiave riservata FROM usando parentesi quadre, come indicato di seguito:
SELECT e.[From] FROM emails AS e
È possibile usare un identificatore tra virgolette sul lato destro di un operatore punto (.).
SELECT t FROM ts as t WHERE t.[property] == 2
Per usare la parentesi quadrata in un identificatore, aggiungere una parentesi quadrata aggiuntiva. Nell'esempio seguente "abc]" è l'identificatore:
SELECT t from ts as t WHERE t.[abc]]] == 2
Per la semantica di confronto tra identificatori tra virgolette, vedere Set di caratteri di input.
Regole di aliasing
È consigliabile specificare alias nelle query Entity SQL ogni volta che sono necessari, inclusi i costrutti entity SQL seguenti:
Campi di un costruttore di riga.
Elementi nella clausola FROM di un'espressione di query.
Elementi nella clausola SELECT di un'espressione di query.
Elementi nella clausola GROUP BY di un'espressione di query.
Alias validi
Gli alias validi in Entity SQL sono un identificatore semplice o un identificatore tra virgolette.
Generazione alias
Se non viene specificato alcun alias in un'espressione di query Entity SQL, Entity SQL tenta di generare un alias in base alle regole semplici seguenti:
Se l'espressione di query (per cui l'alias non è specificato) è un identificatore semplice o tra virgolette, tale identificatore viene usato come alias. Ad esempio,
ROW(a, [b])diventaROW(a AS a, [b] AS [b]).Se l'espressione di query è un'espressione più complessa, ma l'ultimo componente di tale espressione di query è un identificatore semplice, tale identificatore viene usato come alias. Ad esempio,
ROW(a.a1, b.[b1])diventaROW(a.a1 AS a1, b.[b1] AS [b1]).
È consigliabile non usare l'aliasing implicito se si vuole usare il nome alias in un secondo momento. Ogni volta che gli alias (impliciti o espliciti) sono in conflitto o vengono ripetuti nello stesso ambito, si verifica un errore di compilazione. Un alias implicito passerà la compilazione anche se è presente un alias esplicito o implicito con lo stesso nome.
Gli alias impliciti vengono generati automaticamente in base all'input dell'utente. Ad esempio, la riga di codice seguente genererà NAME come alias per entrambe le colonne e pertanto sarà in conflitto.
SELECT product.NAME, person.NAME
Anche la riga di codice seguente, che usa alias espliciti, avrà esito negativo. Tuttavia, l'errore sarà più evidente leggendo il codice.
SELECT 1 AS X, 2 AS X …
Regole di ambito
Entity SQL definisce le regole di ambito che determinano quando determinate variabili sono visibili nel linguaggio di query. Alcune espressioni o istruzioni introducono nuovi nomi. Le regole di definizione dell'ambito determinano dove è possibile usare tali nomi e quando o dove una nuova dichiarazione con lo stesso nome di un altro può nascondere il predecessore.
Quando i nomi vengono definiti in una query Entity SQL, questi vengono definiti all'interno di un ambito. Un ambito copre un'intera area della query. Tutti i riferimenti a espressioni o nomi all'interno di un determinato ambito possono visualizzare i nomi definiti all'interno di tale ambito. Prima dell'inizio di un ambito e dopo il termine, non è possibile fare riferimento ai nomi definiti all'interno dell'ambito.
Gli ambiti possono essere annidati. Parti di Entity SQL introducono nuovi ambiti che coprono intere aree e queste aree possono contenere altre espressioni Entity SQL che introducono anche ambiti. Quando gli ambiti sono annidati, è possibile creare riferimenti ai nomi definiti nell'ambito più interno, che contiene il riferimento. È anche possibile creare riferimenti a qualsiasi nome definito in qualsiasi ambito esterno. Gli eventuali due ambiti definiti all'interno dello stesso ambito sono considerati ambiti di pari livello. Non è possibile creare riferimenti ai nomi definiti all'interno di ambiti di pari livello.
Se un nome dichiarato in un ambito interno corrisponde a un nome dichiarato in un ambito esterno, i riferimenti all'interno dell'ambito interno o all'interno degli ambiti dichiarati all'interno dell'ambito fanno riferimento solo al nome appena dichiarato. Il nome nell'ambito esterno è nascosto.
Anche all'interno dello stesso ambito, non è possibile fare riferimento ai nomi prima di essere definiti.
I nomi globali possono esistere come parte dell'ambiente di esecuzione. Questo può includere nomi di raccolte persistenti o variabili di ambiente. Affinché un nome sia globale, deve essere dichiarato nell'ambito più esterno.
I parametri non sono inclusi in un ambito. Poiché i riferimenti ai parametri includono una sintassi speciale, i nomi dei parametri non si confronteranno mai con altri nomi nella query.
Espressioni di query
Un'espressione di query Entity SQL introduce un nuovo ambito. I nomi definiti nella clausola FROM vengono introdotti nell'ambito in ordine di aspetto, da sinistra a destra. Nell'elenco join le espressioni possono fare riferimento ai nomi definiti in precedenza nell'elenco. Le proprietà pubbliche (campi e così via) degli elementi identificati nella clausola FROM non vengono aggiunte all'ambito di origine. Devono essere sempre referenziati dal nome qualificato dall'alias. In genere, tutte le parti dell'espressione SELECT vengono considerate all'interno dell'ambito di origine.
La clausola GROUP BY introduce anche un nuovo ambito di pari livello. Ogni gruppo può avere un nome di gruppo che fa riferimento alla raccolta di elementi nel gruppo. Ogni espressione di raggruppamento introduce anche un nuovo nome nell'ambito del gruppo. Inoltre, l'aggregazione nest (o il gruppo denominato) viene aggiunta anche all'ambito. Le espressioni di raggruppamento si trovano all'interno dell'ambito di origine. Tuttavia, quando viene utilizzata una clausola GROUP BY, la clausola select-list (proiezione), la clausola HAVING e la clausola ORDER BY vengono considerate all'interno dell'ambito di gruppo e non nell'ambito di origine. Le aggregazioni ricevono un trattamento speciale, come descritto nell'elenco puntato seguente.
Di seguito sono riportate altre note sugli ambiti:
L'elenco di selezione può introdurre nuovi nomi nell'ambito, in ordine. Le espressioni di proiezione a destra possono fare riferimento ai nomi proiettati a sinistra.
La clausola ORDER BY può fare riferimento ai nomi (alias) specificati nell'elenco di selezione.
L'ordine di valutazione delle clausole all'interno dell'espressione SELECT determina l'ordine in cui i nomi vengono introdotti nell'ambito. La clausola FROM viene valutata per prima, seguita dalla clausola WHERE, dalla clausola GROUP BY, dalla clausola HAVING, dalla clausola SELECT e infine dalla clausola ORDER BY.
Gestione delle aggregazioni
Entity SQL supporta due forme di aggregazioni: aggregazioni basate su raccolte e aggregazioni basate su gruppi. Le aggregazioni basate su raccolte sono il costrutto preferito in Entity SQL e le aggregazioni basate su gruppi sono supportate per la compatibilità con SQL.
Quando si risolve un'aggregazione, Entity SQL tenta prima di tutto di considerarlo come un'aggregazione basata su raccolta. In caso di errore, Entity SQL trasforma l'input di aggregazione in un riferimento all'aggregazione nest e tenta di risolvere questa nuova espressione, come illustrato nell'esempio seguente.
AVG(t.c) becomes AVG(group..(t.c))