Linee guida e limitazioni per gli updategram XML (SQLXML 4.0)
Quando si utilizzano updategram XML, tenere presenti le considerazioni seguenti:
Se si usa un updategram per un'operazione di inserimento con una singola coppia di <blocchi prima> e <dopo> , il <blocco prima> può essere omesso. Al contrario, nel caso di un'operazione di eliminazione, il <blocco dopo> può essere omesso.
Se si usa un updategram con più <blocchi prima> e <dopo> nel <tag di sincronizzazione>, prima<> dei blocchi e dopo> i blocchi deve essere specificato per formare prima e<<dopo> le coppie.><
Gli aggiornamenti in un updategram vengono applicati alla vista XML fornita da XML Schema. Ai fini della corretta esecuzione del mapping predefinito, è pertanto necessario specificare il nome del file dello schema nell'updategram o, se il nome di file non viene fornito, i nomi di elemento e di attributo devono corrispondere ai nomi di tabella e di colonna nel database.
SQLXML 4.0 richiede che tutti i valori di colonna in un updategram vengano mappati in modo esplicito nello schema (XDR o XSD) fornito per creare la vista XML per i relativi elementi figlio. Questo comportamento differisce dalle versioni precedenti di SQLXML, che consentono la presenza di un valore per una colonna di cui non sia stato eseguito il mapping nello schema se definita in modo implicito come parte della chiave esterna in un'annotazione
sql:relationship
. Si noti che questa modifica non influisce sulla propagazione dei valori di chiave primaria negli elementi figlio, che si verifica tuttora per SQLXML 4.0 se non viene specificato in modo esplicito alcun valore per l'elemento figlio.Se si usa un updategram per modificare i dati in una colonna binaria ,ad esempio il tipo di dati SQL Server, è necessario specificare uno schema di mapping in cui è necessario specificare il tipo di dati SQL Server
image
( ad esempio , ) e il tipo di dati XML (ad esempiosql:datatype="image"
,dt:type="binhex"
odt:type="binbase64
). I dati per la colonna binaria devono essere specificati nell'updategram. L'annotazionesql:url-encode
specificata nello schema di mapping viene ignorata dall'updategram.Quando si scrive uno schema XSD, se il valore specificato per l'annotazione
sql:relation
osql:field
include un carattere speciale, ad esempio uno spazio (come nel nome di tabella "Dettagli ordine"), questo valore deve essere racchiuso tra parentesi, ad esempio "[Dettagli ordine]".Quando si utilizzano updategram, le relazioni a catena non sono supportate. Se, ad esempio, le tabelle A e C sono correlate tramite una relazione a catena che utilizza la tabella B, si verifica l'errore seguente quando si tenta di eseguire l'updategram:
There is an inconsistency in the schema provided.
Anche se lo schema e l'updategram sono entrambi altrimenti corretti e hanno un formato valido, l'errore si verifica se è presente una relazione a catena.
Gli updategram non permettono il passaggio del tipo di dati
image
come parametri durante gli aggiornamenti.I tipi di oggetti di grandi dimensioni binari (BLOB) come
text/ntext
e le immagini non devono essere usati nel blocco precedente> durante l'uso< di updategrammi, perché in questo modo verranno inclusi per l'uso nel controllo di concorrenza. Ciò può causare problemi con SQL Server a causa delle limitazioni sul confronto per i tipi BLOB. La parola chiave LIKE, ad esempio, viene utilizzata nella clausola WHERE per il confronto tra colonne del tipo di datitext
. I confronti, tuttavia, hanno esito negativo in presenza di tipi BLOB in cui le dimensioni dei dati sono maggiori di 8K.La presenza di caratteri speciali nei dati
ntext
può provocare problemi con SQLXML 4.0 a causa delle limitazioni applicate al confronto per i tipi BLOB. Ad esempio, l'uso di "[Serializable]" nel blocco prima> di un updategrams quando usato nel< controllo di concorrenza di una colonna dintext
tipo avrà esito negativo con la descrizione dell'errore SQLOLEDB seguente:Empty update, no updatable rows found Transaction aborted
Vedere anche
Considerazioni sulla sicurezza degli updategram (SQLXML 4.0)