Linee guida e limitazioni per gli updategram XML (SQLXML 4.0)
Si applica a: SQL Server database SQL di Azure
Quando si utilizzano updategram XML, tenere presenti le considerazioni seguenti:
Se si usa un updategram per un'operazione di inserimento con una sola coppia di <blocchi prima e <dopo>, il <blocco before>> può essere omesso. Viceversa, nel caso di un'operazione di eliminazione, il <blocco after> può essere omesso.
Se si usa un updategram con più <blocchi prima> e <dopo> nel <tag di sincronizzazione>, sia prima> che <dopo> i blocchi <devono essere specificati per formare <coppie prima> e< dopo.>
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 è diverso dalle versioni precedenti di SQLXML, che ha consentito un valore per una colonna non mappata nello schema se è stato 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 immagine di SQL Server), è necessario specificare uno schema di mapping in cui è necessario specificare il tipo di dati sql Server (ad esempio sql:datatype="image") e il tipo di dati XML (ad esempio, dt:type="binhex" o dt:type="binbase64). I dati per la colonna binaria devono essere specificati nell'updategram; L'annotazione sql: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 o sql:field include un carattere speciale, ad esempio un carattere di spazio (ad esempio, nel nome della tabella "Dettagli ordine"), questo valore deve essere racchiuso tra parentesi quadre ( 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 consentono il passaggio di dati del tipo di immagine come parametri durante gli aggiornamenti.
I tipi BLOB (Binary Large Object) come text/ntext e images non devono essere usati nel blocco before> in <quando si usano gli updategram, perché verranno inclusi per l'uso nel controllo della concorrenza. Ciò può causare problemi con SQL Server a causa delle limitazioni sul confronto per i tipi BLOB. Ad esempio, la parola chiave LIKE viene usata nella clausola WHERE per il confronto tra colonne del tipo di dati di testo . Tuttavia, i confronti avranno esito negativo nel caso di tipi BLOB in cui le dimensioni dei dati sono maggiori di 8K.
I caratteri speciali nei dati ntext possono causare problemi con SQLXML 4.0 a causa delle limitazioni sul confronto per i tipi BLOB. Ad esempio, l'uso di "[Serializable]" nel <blocco prima> di un updategram quando viene usato nel controllo della concorrenza di una colonna di tipo ntext avrà esito negativo con la descrizione dell'errore SQLOLEDB seguente:
Empty update, no updatable rows found Transaction aborted
Vedi anche
Considerazioni sulla sicurezza degli updategram (SQLXML 4.0)