Правила и ограничения диаграмм обновления XML (SQLXML 4.0)
При использовании диаграмм обновления XML следует помнить следующее.
Если вы используете диаграмму обновления для операции вставки только с одной парой <блоков до> и <после> , <блок before> можно опустить. И наоборот, в случае операции <удаления блок after> можно опустить.
Если вы используете диаграмму обновления с несколькими <блоками до> и <после> в теге <синхронизации>, необходимо указать как до> блоков, так< и <после> блоков для формирования <пар до> и <после>.
Обновления в диаграммах обновления применяются к XML-представлению, предоставленному схемой XML. Поэтому для успешного сопоставления по умолчанию следует либо указать имя файла схемы в диаграмме обновления, либо, если имя файла не указано, имена элемента и атрибута должны совпадать с именами таблицы и столбца базы данных.
SQLXML 4.0 требует, чтобы все значения столбцов в диаграмме обновления были бы явно сопоставлены в схеме (XDR или XSD), предоставленной для создания XML-представления для дочерних элементов. Такое поведение отличается от более ранних версий SQLXML, которые допускали отсутствие сопоставления для значения столбца в схеме, если оно являлось частью внешнего ключа заметки
sql:relationship
. (Следует отметить, что подобное изменение не повлияет на распространение значений первичного ключа на дочерние элементы, которое по-прежнему происходит в SQLXML 4.0, если явно не указано значение для дочернего элемента.Если вы используете диаграмму обновления для изменения данных в двоичном столбце (например, тип данных SQL Server
image
), необходимо предоставить схему сопоставления, в которой должны быть указаны 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
; однако, в случае с типами больших двоичных объектов, когда размер данных превышает 8 КБ, такое сравнение завершится ошибкой.Специальные символы в данных типа
ntext
могут вызывать проблемы в работе SQLXML 4.0 из-за ограничений, налагаемых на сравнение типов больших двоичных объектов. Например, использование "[Serializable]" в блоке< до> диаграмм обновления при проверке параллелизма столбцаntext
типа завершится ошибкой со следующим описанием ошибки SQLOLEDB:Empty update, no updatable rows found Transaction aborted