Правила и ограничения диаграмм обновления XML (SQLXML 4.0)
При использовании диаграмм обновления XML следует помнить, что:
При использовании диаграмм обновления для операции вставки с единственной парой блоков <before> и <after>, блок <before> можно опустить. Напротив, при операции удаления можно опустить блок <after>.
При использовании диаграммы обновления с несколькими блоками <before> и <after> в теге <sync>, как блоки <before>, так и блоки <after> должны быть указаны для формирования пар <before> и <after>.
Обновления в диаграммах обновления применяются к XML-представлению, предоставленному схемой XML. Таким образом, для успешного сопоставления по умолчанию следует либо указать имя файла схемы в диаграмме обновления, либо, если имя файла не указано, имена элемента и атрибута должны совпадать с именами таблицы и столбца базы данных.
SQLXML 4.0 требует, чтобы все значения столбцов в диаграмме обновления должны быть явно сопоставлены в схеме (XDR или XSD), предоставленной для создания XML-представления для своих дочерних элементов. Такое поведение отличается от более ранних версий SQLXML, которые допускали отсутствие сопоставления для значения столбца в схеме, если оно являлось частью внешнего ключа заметки sql:relationship. (Следует отметить, что подобное изменение не повлияет на распространение значений первичного ключа на дочерние элементы, которое по-прежнему происходит в SQLXML 4.0, если явно не указано значение для дочернего элемента.
При использовании диаграммы обновления для изменения данных в двоичном столбце (как например, типы данных SQL Serverimage) следует обеспечить схему сопоставления, в которой должны быть указаны тип данных SQL Server (например, sql:datatype="image") и тип данных XML (например, dt:type="binhex" или dt:type="binbase64). Данные для двоичного столбца должны быть указаны в диаграмме обновления; заметка sql:url-encode, указанная в схеме сопоставления, не учитывается в диаграмме обновления.
При написании схемы XSD, если указываемое для заметки sql:relation или sql:field значение включает в себя специальный символ такой, как пробельный символ (например, в имени таблицы "Order Details"), это значение должно быть заключено в скобки (например, "[Order Details]").
При использовании диаграмм обновления цепочки связей не поддерживаются. Например, если таблицы А и С связаны через цепочку связей, которая использует таблицу В, при попытке запустить и выполнить диаграмму обновления возникнет следующая ошибка:
There is an inconsistency in the schema provided.
Даже если как схема, так и диаграмма обновления верны и правильно оформлены, эта ошибка возникнет, если имеется цепочка связей.
Диаграммы обновления не допускают передачи данных типа image как параметров в процессе обновления.
Типы больших двоичных объектов (BLOB) как text/ntext и изображение не должны использоваться в блоке <before> при работе с диаграммами обновления, так как это приведет к использованию их в управлении параллелизмом. Это может вызвать проблемы в работе SQL Server из-за ограничений, налагаемых на сравнение для типов BLOB. Например, ключевое слово LIKE используется в предложении WHERE для сравнения столбцов типа данных text; однако в случае с типами BLOB, когда размер данных превышает 8 КБ, такое сравнение завершится ошибкой.
Специальные символы в данных типа ntext могут вызывать проблемы в работе SQLXML 4.0 из-за ограничений, налагаемых на сравнение типов BLOB. Например, использование "[Serializable]" в блоке <before> диаграмм обновления при включенной проверке параллелизма столбца типа ntext приведет к ошибке SQLOLEDB со следующим описанием:
Empty update, no updatable rows found Transaction aborted