TREAT (entitets-SQL)
Behandlar ett objekt av en viss bastyp som ett objekt av den angivna härledda typen.
Syntax
TREAT ( expression as type)
Argument
expression
Alla giltiga frågeuttryck som returnerar en entitet.
Kommentar
Typen av det angivna uttrycket måste vara en undertyp av den angivna datatypen, eller så måste datatypen vara en undertyp av uttryckstypen.
type
En entitetstyp. Typen måste kvalificeras av ett namnområde.
Kommentar
Det angivna uttrycket måste vara en undertyp av den angivna datatypen, eller så måste datatypen vara en undertyp av uttrycket.
Returvärde
Ett värde för den angivna datatypen.
Kommentarer
TREAT används för att utföra uppsändning mellan relaterade klasser. Om Employee
det till exempel härleds från Person
och p är av typen Person
, TREAT(p AS NamespaceName.Employee)
upparbetas en allmän Person
instans till Employee
. Det innebär att du kan behandla p som Employee
.
TREAT används i arvsscenarier där du kan göra en fråga som följande:
SELECT TREAT(p AS NamespaceName.Employee)
FROM ContainerName.Person AS p
WHERE p IS OF (NamespaceName.Employee)
Den här frågan genererar entiteter Person
till Employee
typen. Om värdet för p faktiskt inte är av typen Employee
ger uttrycket värdet null
.
Kommentar
Det angivna uttrycket Employee
måste vara en undertyp av den angivna datatypen Person
, eller så måste datatypen vara en undertyp av uttrycket. Annars resulterar uttrycket i ett kompileringsfel.
I följande tabell visas beteendet för behandling över vissa typiska mönster och några mindre vanliga mönster. Alla undantag genereras från klientsidan innan providern anropas:
Mönster | Funktionssätt |
---|---|
TREAT (null AS EntityType) |
Returnerar DbNull . |
TREAT (null AS ComplexType) |
Utlöser ett undantag. |
TREAT (null AS RowType) |
Genererar ett undantag/ |
TREAT (EntityType AS EntityType) |
Returnerar EntityType eller null . |
TREAT (ComplexType AS ComplexType) |
Utlöser ett undantag. |
TREAT (RowType AS RowType) |
Utlöser ett undantag. |
Exempel
Följande entitets-SQL-fråga använder TREAT-operatorn för att konvertera ett objekt av typen Kurs till en samling objekt av typen OnsiteCourse. Frågan baseras på skolmodellen.
SELECT VALUE TREAT (course AS SchoolModel.OnsiteCourse)
FROM SchoolEntities.Courses AS course
WHERE course IS OF( SchoolModel.OnsiteCourse)