XML Updategram 的准则和限制(SQLXML 4.0)

使用 XML updategram 时,请记住以下几点:

  • 如果将 updategram 用于插入作,且只包含一对之前>和之后的<块<则可以省略前>一个块。>< 相反,如果删除作, <可以省略后> 块。

  • 如果将 updategram 与同步>标记中的<多个<块><>一起使用,则必须在块之前和<之后>>都指定为成对前后<>的<块><

  • updategram 中的更新将应用于 XML 架构提供的 XML 视图。 因此,若要使默认映射成功,必须在 updategram 中指定架构文件名;如果未提供文件名,则元素和属性名称必须与数据库中的表和列名匹配。

  • SQLXML 4.0 要求必须在提供的架构(XDR 或 XSD)中显式映射 updategram 中的所有列值,以便为其子元素撰写 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:relationsql:field 批注指定的值包括一个特殊字符,例如空格字符(例如,在“订单详细信息”表名称中),该值必须括在方括号中(例如“[订单详细信息]”)。

  • 使用 updategram 时,不支持链关系。 例如,如果表 A 和 C 通过使用表 B 的链关系相关,则尝试运行和执行 updategram 时会发生以下错误:

    There is an inconsistency in the schema provided.  
    

    即使架构和 updategram 均正确且格式有效,但如果存在链关系,也会发生此错误。

  • Updategram 不允许在更新期间将类型数据作为参数传递 image

  • 二进制大型对象(BLOB)类型(如 text/ntext 和图像)不应在 <处理 updategram 时在块中使用> ,因为这将包括它们以用于并发控制。 这可能会导致 SQL Server 出现问题,因为 BLOB 类型的比较存在限制。 例如,WHERE 子句中使用 LIKE 关键字来比较数据类型的 text 列;但是,如果 BLOB 类型的大小大于 8K,则比较将失败。

  • 数据中的 ntext 特殊字符可能会导致 SQLXML 4.0 出现问题,因为 BLOB 类型的比较存在限制。 例如,在对类型的列ntext进行并发检查时,在 updategram 的前面>块中使用“[Serializable]”<将失败,并出现以下 SQLOLEDB 错误说明:

    Empty update, no updatable rows found   Transaction aborted  
    

另请参阅

Updategram 安全注意事项 (SQLXML 4.0)