比较语义 (Entity SQL)
执行下列任一 实体 SQL 运算符时都涉及类型实例的比较:
显式比较
相等运算:
=
!=
排序运算:
<
<=
>
>=
判断是否可为 Null 的运算:
为 NULL
IS NOT NULL
显式区别
相等区别:
DISTINCT
GROUP BY
排序区别:
- ORDER BY
隐式区别
集运算和谓词(相等):
UNION
INTERSECT
EXCEPT
SET
OVERLAPS
项谓词(相等):
- IN
支持的组合
下表说明了每种类型的比较运算符的所有受支持的组合:
类型 | = != |
GROUP BY DISTINCT |
UNION INTERSECT EXCEPT SET OVERLAPS |
IN | <<= >>= |
ORDER BY | 为 NULL 不为 NULL |
---|---|---|---|---|---|---|---|
实体类型 | Ref1 | 所有属性2 | 所有属性2 | 所有属性2 | Throw3 | Throw3 | Ref1 |
复杂类型 | Throw3 | Throw3 | Throw3 | Throw3 | Throw3 | Throw3 | Throw3 |
行 | 所有属性4 | 所有属性4 | 所有属性4 | Throw3 | Throw3 | 所有属性4 | Throw3 |
基元类型 | 特定于提供程序 | 特定于提供程序 | 特定于提供程序 | 特定于提供程序 | 特定于提供程序 | 特定于提供程序 | 特定于提供程序 |
多集 | Throw3 | Throw3 | Throw3 | Throw3 | Throw3 | Throw3 | Throw3 |
引用 | 是5 | 是5 | 是5 | 是5 | Throw | Throw | 是5 |
关联 类型 |
Throw3 | Throw | Throw | Throw | Throw3 | Throw3 | Throw3 |
1给定实体类型实例的引用被隐式比较,如下面的示例所示:
SELECT p1, p2
FROM AdventureWorksEntities.Product AS p1
JOIN AdventureWorksEntities.Product AS p2
WHERE p1 != p2 OR p1 IS NULL
不能将实体实例与显式引用进行比较。 如果试图这么做,则会引发异常。 例如,以下查询将引发异常:
SELECT p1, p2
FROM AdventureWorksEntities.Product AS p1
JOIN AdventureWorksEntities.Product AS p2
WHERE p1 != REF(p2)
2复杂类型的属性在发送到存储之前被转换为扁平类型,因此它们变得可比较(前提是它们的所有属性可比较)。 另请参见4.
3实体框架运行库检测到不受支持的情况,并在不牵扯提供程序/存储的情况下引发有意义的异常。
4试图比较所有属性。 如果某个属性的类型不可比较,例如 text、ntext 或 image,则可能引发服务器异常。
5比较引用的所有单个元素(这包括实体集名称和该实体类型的所有键属性)。