Delen via


Richtlijnen en beperkingen van XML-updategrammen (SQLXML 4.0)

Van toepassing op:SQL ServerAzure SQL Database

Onthoud het volgende bij het gebruik van XML-updategrammen:

  • Als je een updategram gebruikt voor een insert-operatie met slechts één paar <voor-> en <na-blokken> , kan het <voor-blok> worden weggelaten. Omgekeerd kan bij een verwijderingsoperatie het <na-blok> worden weggelaten.

  • Als je een updategram gebruikt met meerdere <voor-> en <nablokken> in de <sync-tag>, moeten zowel <voor-> als <nablokken> worden gespecificeerd om voor> en na paren te vormen<.><

  • De updates in een updategram worden toegepast op de XML-weergave die door het XML-schema wordt geleverd. Daarom moet u, om de standaardmapping te laten slagen, ofwel de schemabestandsnaam in het updategram specificeren, of, als de bestandsnaam niet wordt opgegeven, moeten de elementen- en attribuutnamen overeenkomen met de tabel- en kolomnamen in de database.

  • SQLXML 4.0 vereist dat alle kolomwaarden in een updategram expliciet worden toegewezen in het schema (XDR of XSD) dat wordt geleverd om de XML-weergave voor de kindelementen samen te stellen. Dit gedrag verschilt van eerdere versies van SQLXML, die een waarde toestonden voor een kolom die niet in het schema was toegewezen als deze werd geïmpliceerd als onderdeel van de vreemde sleutel in een sql: relationship-annotatie. (Let op: deze wijziging beïnvloedt de propagatie van primaire sleutelwaarden naar kindelementen, wat nog steeds voorkomt voor SQLXML 4.0 als er geen waarde expliciet is gespecificeerd voor het kindelement.

  • Als je een updategram gebruikt om data in een binaire kolom te wijzigen (zoals het SQL Server-afbeeldingsdatatype ), moet je een mappingschema leveren waarin het SQL Server-datatype (bijvoorbeeld sql:datatype="image") en het XML-datatype (bijvoorbeeld dt:type="binhex" of dt:type="binbase64) moeten worden gespecificeerd. De gegevens voor de binaire kolom moeten worden gespecificeerd in het updategram; De sql:url-encode-annotatie die in het mapping schema is gespecificeerd, wordt genegeerd door het updategram.

  • Wanneer je een XSD-schema schrijft, als de waarde die je specificeert voor de sql:relation- of sql:field-annotatie een speciaal teken bevat, zoals een spatieteken (bijvoorbeeld in de naam van de tabel "Order Details"), moet deze waarde tussen haakjes worden geplaatst (bijvoorbeeld "[Order Details]").

  • Bij het gebruik van updategrammen worden kettingrelaties niet ondersteund. Als bijvoorbeeld tabellen A en C gerelateerd zijn via een ketenrelatie die tabel B gebruikt, zal de volgende fout optreden bij het uitvoeren en uitvoeren van het updategram:

    There is an inconsistency in the schema provided.  
    

    Zelfs als zowel het schema als het updategram verder correct en geldig gevormd zijn, zal deze fout optreden als er een kettingrelatie aanwezig is.

  • Updategrammen staan niet toe dat afbeeldingstypegegevens als parameters worden doorgegeven tijdens updates.

  • Binaire grote objecttypes (BLOB) zoals tekst/ntext en afbeeldingen mogen niet worden gebruikt in de <voor-block> in bij het werken met updategrammen, omdat dit ze zal opnemen voor gebruik in gelijktijdigheidscontrole. Dit kan problemen veroorzaken met SQL Server vanwege de beperkingen bij vergelijking van BLOB-types. Bijvoorbeeld, het LIKE-trefwoord wordt gebruikt in de WHERE-clausule om kolommen van het tekstdatatype te vergelijken; vergelijkingen zullen echter mislukken bij BLOB-types waarbij de datagrootte groter is dan 8K.

  • Speciale tekens in ntext-data kunnen problemen veroorzaken met SQLXML 4.0 vanwege de beperkingen op vergelijking voor BLOB-types. Bijvoorbeeld, het gebruik van "[Serializable]" in het <voor-blok> van een updategrams wanneer het wordt gebruikt bij gelijktijdigheidscontrole van een kolom van ntext-type , zal falen met de volgende SQLOLEDB-foutbeschrijving:

    Empty update, no updatable rows found   Transaction aborted  
    

Zie ook

Beveiligingsoverwegingen voor Updategram (SQLXML 4.0)