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