多数表达式函数在所有数据提供程序中运行方式相同,但是也有一些例外情况。
创建过滤器或已计算的特性时,可以使用任意函数。这些结果不会保存回数据存储。然而,在 AutoCAD Map 3D 工具集 中,如果使用会返回不受支持的数据类型的函数将值插入“数据表”,会出现异常结果。该操作对数据提供程序无效。例如,SHP 文件不支持 FdoInt16 或 FdoDouble 数据类型。如果试图将此数据类型的值保存回 SHP 数据存储,将出现错误。
在 AutoCAD Map 3D 工具集 中,可以先应用表达式,再真正连接到数据存储。例如,您可以使用查询来向地图添加要素。这种情况对 ODBC 提供程序来说可能存在问题,其可能连接到多个数据源。并非所有 ODBC 源都支持表达式函数。因此,在所有情况下均将函数计算为表达式构建过程的一部分,即使是已连接的数据源也可执行此操作。
所有关系数据库管理系统 (RDBMS) 原本就支持 Soundex 函数。底层 RDBMS 将计算包含此函数的所有表达式。但是,MySQL 提供程序返回的结果可能与从其他提供程序获得的结果不同。
SDF 和 SHP 提供程序使用术语 TRUE 和 FALSE 表示布尔运算值。RDBMS 提供程序使用 0 和 1 表示布尔运算值。这些差异可能影响标签的显示。例如,以下表达式定义的标签指示了阀门是否打开:
Concat('Valve is open: ', <valve_status_property>)
对于 SDF 和 SHP 数据,标签将显示为“Valve is open: True”。对于 RDBMS 数据,标签将显示为“Valve is open: 1”。
AddMonths 与 MonthsBetween 函数不考虑日份信息,而 RDBMS 系统却相反。
例如,对于表达式 AddMonths(<date_property>, 88.7),RDBMS 提供程序会将 88.7 个月添加到所提供的日期。在产品中创建的表达式中的函数将仅添加 88 个月。
同样,对于表达式 MonthsBetween(<date_1>, <date_2>),RDBMS 提供程序可能会返回值 77.4。在产品中创建的表达式中的函数会返回 77。
某些操作(例如,创建已计算特性)是基于缓存的操作,使用表达式构建过程进行计算。其他操作(例如,RDBMS 数据存储中的过滤器)使用底层 RDBMS 系统。
结果会因提供程序的不同而有所差别。例如,如果连接到 MySQL 数据存储,您可以创建两个已计算特性:CP1 和 CP2。CP1 由表达式 Soundex(<property>) 定义,CP2 由表达式 Soundex(<literal>) 定义。在“数据表”中,CP1 和 CP2 的值可能相同。但是,如果使用包含表达式 Soundex(<property>) = Soundex(<literal>) 的过滤器,结果值可能有所不同。在 Map_ProdNameLong 的AutoCAD Map 3D 工具集中,表达式构建过程将计算表达式。MySQL 数据存储(使用不同函数定义)会计算过滤器。