XML Updategram 的指导原则和限制 (SQLXML 4.0)
在使用 XML updategram 时,请记住以下事项:
如果将 updategram 用于插入操作,且只包含一对之前>和<之后>的<块,<则可以省略前>一个块。 相反,如果删除操作, <可以省略后> 块。
如果将 updategram 与同步>标记中的<多个<块>><一起使用,<则必须在块之前和<之后>>都指定为成对前后><>的<块。
updategram 中的更新适用于 XML 架构提供的 XML 视图。 因此,为使默认映射成功,必须在 updategram 中指定架构文件名;或者,如果未提供文件名,则元素名称和属性名称必须匹配数据库中的表名和列名。
SQLXML 4.0 要求 updategram 中的所有列值都必须显式映射在提供的架构(XDR 或 XSD)中,以便为其子元素编写 XML 视图。 此行为不同于早期版本的 SQLXML,如果 SQL:关系注释中隐含列作为外键的一部分,则允许架构中未映射的列的值。 请注意,这一变化并不影响主键值传播到子元素,如果没有为子元素显式指定值,则对于 SQLXML 4.0,主键值仍会传播到子元素。
如果使用 updategram 修改二进制列中的数据(例如 SQL Server 映像数据类型),则必须提供 SQL Server 数据类型(例如 sql:datatype=“image”)和 XML 数据类型(例如 dt:type=“binhex”或 dt:type=“binbase64”)的映射架构。 必须在 updategram 中指定二进制列的数据; updategram 忽略映射架构中指定的 sql:url 编码 注释。
编写 XSD 架构时,如果为 sql:relation 或 sql:field 批注指定的值包括一个特殊字符,例如空格字符(例如,在“订单详细信息”表名称中),该值必须括在括号中(例如“[订单详细信息]”)。
在使用 updategram 时,不支持链关系。 例如,如果表 A 和 C 通过使用表 B 的链关系相关,则在尝试运行和执行 updategram 时将发生以下错误:
There is an inconsistency in the schema provided.
即使架构和 updategram 均正确并且有效建立,但如果存在某一链关系,此错误仍将发生。
Updategram 不允许在更新期间将图像类型数据作为参数传递。
使用 updategram 时,不应在<块前>使用文本/ntext 和图像等二进制大型对象(BLOB)类型,因为这将包括它们以用于并发控制。 这可能会导致 SQL Server 出现问题,因为 BLOB 类型的比较存在限制。 例如,WHERE 子句中使用 LIKE 关键字来比较文本数据类型的列;但是,在数据大小大于 8K 的 BLOB 类型的情况下,比较将失败。
ntext 数据中的特殊字符可能会导致 SQLXML 4.0 出现问题,因为 BLOB 类型的比较存在限制。 例如,当在 ntext 类型的列的并发检查中使用“[Serializable]”时,在 updategram 的前面>块中使用“[Serializable]”<将失败,并出现以下 SQLOLEDB 错误说明:
Empty update, no updatable rows found Transaction aborted