混合文字码
不同文字码和字符常量的视表可以在相同视表过滤器中被处理。在处理期间需要遵循的规则如下。
下面提到的"字符(WCHAR)表格栏"是指带SQL DB连接源的视表
或者带更新SQL DB连接源的视表
("ODBC 驱动程序"必须为他们的Provider种类所指定。)中所定义的"字符(WCHAR)",
"字符(WVARCHAR)",或者
"字符(WLONGVARCHAR)"表格栏。
"字符(WCHAR) 表格栏"是视表中所指定的文字码在输入/输出进程中将不会影响但是Unicode(Little endian)实际被应用的唯一表格栏。
尽管该表格栏类型可以为任何表格栏所指定,即使Provider种类中没有指定"ODBC 驱动程序"。不要指定该表格栏类型除非选择了"ODBC
驱动程序" 作为Provider种类。如果该表格栏类型被指定,表格栏数据与"字符"表格栏数据有同样的行为,并且数据将不在Unicode(Little endian)中被处理,但是在为视表所指定的文字码中。
注意"字符(WCHAR)表格栏"只在视表过滤器中有效,因为该表格栏不能在数据通道连接器中被使用。为了按随后的处理步骤将Unicode数据传送给视表过滤器,必须在带数据通道连接源的视表中指定一个与文字码相关的Unicode,而不使用 "字符(WCHAR)表格栏"。
- 输入视表中的文字码处理在选定的条件下被执行,分割条件,
子组条件,
统计处理。
例如,当相应比较在选定条件的字符类型中被执行,排序顺序由输入视表的文字码顺序所决定。
输入视表中字符(WCHAR)表格栏的文字码不在输出视表的文字码中被处理,但是它在Unicode(Little endian)中被处理。
因此,该表格栏基于Unicode(Little endian)的字符顺序被存储。
然而,即使字符(WCHAR)表格栏被处理,排序顺序依赖于访问数据库的规范,因为提取过程和统计过程 (没有指定子组)
在数据库中被执行。
此外,允许为条件值所指定的字符需要在GB18030字符类型数据中。
(在后面的字符常量部分也会提到。)即使字符(WCHAR)表格栏被使用,本地Unicode字符 (不与任何GB18030字符对应的字符)不能为条件值所指定。
- 当结合与归并过程被执行时,如果每个视表中所使用的文字码不同,那么使用在第一个视表中被指定的文字码。
这里获得了结合目标,复制记录在归并期间被删除并且关键匹配过程被执行。表格栏的关键匹配当表格栏被转换为第一个输入视表的文字码并被存储的状态下被执行。
因此,请注意只有当排序由第一个视表的文字码完成时这种情况下的视表排序才能被清除。
输入视表中字符(WCHAR)表格栏的文字码不在输出视表的文字码中被处理,但是它在Unicode(Little endian)中被处理。如果匹配过程中表格栏的文字码是在Unicode(小端)中,那么关键的匹配过程在Unicode数据排序之后的Unicode(小端)中被执行。如果匹配表格栏的文字码不同,那么关键的匹配过程在转换与排序在第一个视表中被指定的文字码的数据之后被执行。如果在每个视表中所使用的文字码不同,那么使用在第一个视表中被指定的文字码。如果匹配表格栏的文字码不同,那么关键的匹配过程在转换与排序在第一个视表中被指定的文字码的数据之后被执行。
- 在参照视表中被指定的文字码被用于参照过程。
参照视表的选择条件也由参照视表中指定的文字码处理。
在参照处理中,即使不同文字码被用于输入视表和每个多重参照视表中也没关系。
在这种情况下,关键匹配过程由在每个参照视表中指定的从输入视表到文字码的转换数据执行的。如果存在一个存在于输入视表的文字码中但是不存在于参照视表的文字码中的字符,参照处理可能不被正确执行。
输入视表中数据到字符(WCHAR)表格栏数据的关键匹配过程是由从输入视表到Unicode(Little endian)的转换数据执行的。
- 排序是按照每个视表过滤器中排序键 标签的规范被执行的。输入表格栏在输入视表的文字码上被排序并且输出表格栏在输出视表的文字码上被排序。
在归并视表过滤器中,输入表格栏排序不能被执行。只可能为输出视表排序文字码。
使用排序键 标签排序显示为前结合处理,归并处理与参照选项关键匹配的排序被独立执行。
字符(WCHAR)表格栏由Unicode(Little endian)被排序仅当为排序键所指定的输入表格栏是一个字符(WCHAR) 表格栏。即使为排序键指定的输出表格栏是一个字符(WCHAR)表格栏,字符排序由在转换为那个视表中所指定文字码的输出视表中指定的文字码被执行。
尽管一个视表允许在带更新SQL DB连接源的视表中使用字符(WCHAR)表格栏,那个视表的文字码需要是GB18030中字符类型数据。因此,
字符(WCHAR) 表格栏,一般来说,不能为排序键所指定。
默认情况下,本机Unicode字符(不对应与任何 GB18030 字符) 被转换为一个白色空格当由GB18030字符类型数据排序时。
- 在表格栏过滤器中,当文字码与处理多个字符串的函数相同时,他被以与文字码相同的条件被处理。
当文字码不同时,所有的文字码都被转换为第一个输出视表的文字码然后排序过程被执行。
例如,在分割视表过滤器中,文字码转换是否也可能由输入视表文字码的指令被执行,第一个输出视表的文字码与输出视表的文字码都由分割条件来决定。在这种情况下,如果视表过滤器作为使用表格栏过滤器与分割视表过滤器被划分,它可能会提高性能。
- 在表格栏过滤器中为字符常量指定的文字码将会是字符类型数据。
也就是说,当带有UTF-8文字码的输入视表数据由连接函数被连接到"字符常量",第一个输出视表的文字码转换根据上面的规则被执行。
当上面所描述的自动文字码转换不方便,文字码转换可以使用后面将会提到的代码转换函数被手动完成。
- 类似前面的语句,当参照视表过滤器中参照 标签处理无匹配记录,拒收(reject)数据的指定值被改成"指定值",
并且统计视表过滤器中使用子组模式的"用户定义"的子组名也将被视为 GB18030
字符类型数据。
- 只有当十六进制规范在表格栏过滤器中作为替换函数的参数时,它被假定为"没有文字码的字符串"。因为没有文字码,字符的二进制数据不被文字码转换所转换。当没有十六进制符号时,与正常函数相似,文字码转换为参数的每个不同文字码所执行。
- 如果 代码转换函数 被用于表格栏过滤器中,文字码转换将需要被明确执行。
- 当归并不同文字码的视表而不指定一个关键表格栏时,或者当使用表格栏过滤器的
IF 函数 并且当文字码的不同值被返回时,字符类型数据对每个记录是不同的,
不论是否是相同的表格栏类型。这将在向输出视表(排序之前)给出输出时作为输出视表文字码被更改。
输出视表中字符(WCHAR)表格栏的文字码不在输出视表的文字码中被处理,但是它在Unicode(Little endian)中被处理。
- 文字码也可以被指定于 带数据通道连接器的视表 和
带临时文件连接源的视表 和
带虚拟文件连接源的视表。
当数据通过这些视表被传输时,接近内部数据的数据将在视表过滤器中被传递。文字码转换将相应地被执行。