Dela via


Identifierare (entitets-SQL)

Identifierare används i Entitets-SQL för att representera frågeuttrycksalias, variabelreferenser, egenskaper för objekt, funktioner och så vidare. Entitets-SQL innehåller två typer av identifierare: enkla identifierare och citerade identifierare.

Enkla identifierare

En enkel identifierare i Entity SQL är en sekvens med alfanumeriska tecken och understreckstecken. Identifierarens första tecken måste vara ett alfabetiskt tecken (a-z eller A-Z).

Citerade identifierare

En citerad identifierare är en sekvens med tecken som omges av hakparenteser ([]). Med citerade identifierare kan du ange identifierare med tecken som inte är giltiga i identifierare. Alla tecken mellan hakparenteserna blir en del av identifieraren, inklusive allt tomt utrymme.

En citerad identifierare kan inte innehålla följande tecken:

  • Newline.

  • Vagnreturer.

  • Flikar.

  • Backsteg.

  • Ytterligare hakparenteser (d.s. hakparenteser inom hakparenteserna som avgränsar identifieraren).

En citerad identifierare kan innehålla Unicode-tecken.

Med citerade identifierare kan du skapa egenskapsnamnstecken som inte är giltiga i identifierare, vilket visas i följande exempel:

SELECT c.ContactName AS [Contact Name] FROM customers AS c

Du kan också använda citerade identifierare för att ange en identifierare som är ett reserverat nyckelord i Entity SQL. Om typen Email till exempel har en egenskap med namnet "Från" kan du skilja den från det reserverade nyckelordet FROM med hjälp av hakparenteser på följande sätt:

SELECT e.[From] FROM emails AS e

Du kan använda en citerad identifierare till höger om en punktoperator (.).

SELECT t FROM ts as t WHERE t.[property] == 2

Om du vill använda hakparentesen i en identifierare lägger du till en extra hakparentes. I följande exempel är "abc]" identifieraren:

SELECT t from ts as t WHERE t.[abc]]] == 2

Se Indatateckenuppsättning för jämförelse av citerade identifierare.

Aliasregler

Vi rekommenderar att du anger alias i entitets-SQL-frågor när det behövs, inklusive följande entitets-SQL-konstruktioner:

  • Fält för en radkonstruktor.

  • Objekt i FROM-satsen i ett frågeuttryck.

  • Objekt i SELECT-satsen i ett frågeuttryck.

  • Objekt i GROUP BY-satsen i ett frågeuttryck.

Giltiga alias

Giltiga alias i entitets-SQL är valfri enkel identifierare eller citerad identifierare.

Aliasgenerering

Om inget alias anges i ett entitets-SQL-frågeuttryck försöker entitets-SQL generera ett alias baserat på följande enkla regler:

  • Om frågeuttrycket (för vilket aliaset är ospecificerat) är en enkel eller citerad identifierare används identifieraren som alias. Till exempel kommer ROW(a, [b]) att bli ROW(a AS a, [b] AS [b]).

  • Om frågeuttrycket är ett mer komplext uttryck, men den sista komponenten i frågeuttrycket är en enkel identifierare, används identifieraren som alias. Till exempel kommer ROW(a.a1, b.[b1]) att bli ROW(a.a1 AS a1, b.[b1] AS [b1]).

Vi rekommenderar att du inte använder implicit alias om du vill använda aliasnamnet senare. När alias (implicit eller explicit) står i konflikt eller upprepas i samma omfång uppstår ett kompileringsfel. Ett implicit alias skickas kompilering även om det finns ett explicit eller implicit alias med samma namn.

Implicita alias genereras automatiskt baserat på användarindata. Följande kodrad genererar till exempel NAME som ett alias för båda kolumnerna och kommer därför att vara i konflikt.

SELECT product.NAME, person.NAME

Följande kodrad, som använder explicita alias, misslyckas också. Felet blir dock tydligare genom att läsa koden.

SELECT 1 AS X, 2 AS X …

Omfångsregler

Entitets-SQL definierar omfångsregler som avgör när vissa variabler visas på frågespråket. Vissa uttryck eller uttryck introducerar nya namn. Omfångsreglerna avgör var dessa namn kan användas och när eller var en ny deklaration med samma namn som en annan kan dölja sin föregångare.

När namn definieras i en entitets-SQL-fråga sägs de definieras inom ett omfång. Ett omfång omfattar en hel region i frågan. Alla uttryck eller namnreferenser inom ett visst omfång kan se namn som har definierats inom det omfånget. Innan ett omfång börjar och när det har upphört kan namn som definierats inom omfånget inte refereras till.

Omfång kan kapslas. Delar av Entitets-SQL introducerar nya omfång som täcker hela regioner, och dessa regioner kan innehålla andra SQL-uttryck för entiteter som också introducerar omfång. När omfång är kapslade kan referenser göras till namn som definieras i det innersta omfånget, som innehåller referensen. Referenser kan också göras till alla namn som definieras i alla yttre omfång. Två omfång som definierats inom samma omfång betraktas som syskonomfattningar. Det går inte att göra referenser till namn som definieras inom samma omfång.

Om ett namn som deklarerats i ett inre omfång matchar ett namn som deklarerats i ett yttre omfång, refererar referenser inom det inre omfånget eller inom omfång som deklarerats inom det omfånget endast till det nyligen deklarerade namnet. Namnet i det yttre omfånget är dolt.

Även inom samma omfång kan namn inte refereras till innan de definieras.

Globala namn kan finnas som en del av körningsmiljön. Detta kan innehålla namn på beständiga samlingar eller miljövariabler. För att ett namn ska vara globalt måste det deklareras i det yttersta omfånget.

Parametrarna finns inte i ett omfång. Eftersom referenser till parametrar innehåller särskild syntax, kommer namn på parametrar aldrig att kollidera med andra namn i frågan.

Frågeuttryck

Ett sql-frågeuttryck för entitet introducerar ett nytt omfång. Namn som definieras i FROM-satsen introduceras i från-omfånget i utseendeordning, från vänster till höger. I kopplingslistan kan uttryck referera till namn som definierades tidigare i listan. Offentliga egenskaper (fält och så vidare) för element som identifieras i FROM-satsen läggs inte till i omfånget. De måste alltid refereras till av det aliaskvalificerade namnet. Normalt betraktas alla delar av SELECT-uttrycket inom omfånget.

GROUP BY-satsen introducerar också ett nytt syskonomfång. Varje grupp kan ha ett gruppnamn som refererar till samlingen med element i gruppen. Varje grupperingsuttryck introducerar också ett nytt namn i gruppomfånget. Dessutom läggs även kapslingsaggregatet (eller den namngivna gruppen) till i omfånget. Själva grupperingsuttrycken ligger inom omfånget. Men när en GROUP BY-sats används anses select-list (projektion), HAVING-satsen och ORDER BY-satsen ligga inom gruppomfånget och inte från omfånget. Aggregeringar får särskild behandling enligt beskrivningen i följande punktlista.

Följande är ytterligare kommentarer om omfång:

  • Välj-listan kan introducera nya namn i omfånget i ordning. Projektionsuttryck till höger kan referera till namn som projiceras till vänster.

  • ORDER BY-satsen kan referera till namn (alias) som anges i urvalslistan.

  • Ordningen för utvärdering av satser i SELECT-uttrycket bestämmer ordningen som namn introduceras i omfånget. FROM-satsen utvärderas först, följt av WHERE-satsen, GROUP BY-satsen, HAVING-satsen, SELECT-satsen och slutligen ORDER BY-satsen.

Aggregerad hantering

Entitets-SQL stöder två typer av aggregeringar: samlingsbaserade aggregeringar och gruppbaserade aggregeringar. Samlingsbaserade aggregeringar är den föredragna konstruktionen i Entitets-SQL och gruppbaserade aggregeringar stöds för SQL-kompatibilitet.

När du löser en aggregering försöker Entity SQL först behandla den som en samlingsbaserad aggregering. Om det misslyckas omvandlar Entitets-SQL aggregerade indata till en referens till kapslingsaggregatet och försöker lösa det nya uttrycket, som illustreras i följande exempel.

AVG(t.c) becomes AVG(group..(t.c))

Se även