Riktlinjer och begränsningar för XML-uppdateringsgram (SQLXML 4.0)

gäller för:SQL ServerAzure SQL Database

Kom ihåg följande när du använder XML-uppdateringsgram:

  • Om du använder ett updategram för en insert-operation med endast ett par <före-> och <efter-block> , <kan före-blocket> utelämnas. Omvänt, vid en borttagningsoperation kan blocket< efter> tas bort.

  • Om du använder ett updategram med flera <före-> och <efter-block> i synkroniseringstaggen<> måste både <före-> och <efter-block> anges för att bildas <före> och <efter> par.

  • Uppdateringarna i ett updategram appliceras på XML-vyn som tillhandahålls av XML-schemat. Därför måste du antingen ange schemafilnamnet i updategrammet för att standardmappningen ska lyckas, eller om filnamnet inte finns, måste element- och attributnamnen matcha tabell- och kolumnnamnen i databasen.

  • SQLXML 4.0 kräver att alla kolumnvärden i ett updategram explicit mappas i schemat (antingen XDR eller XSD) som tillhandahålls för att sammanställa XML-vyn för dess barnelement. Detta beteende skiljer sig från tidigare versioner av SQLXML, som tillät ett värde för en kolumn som inte var mappad i schemat om det antyddes som en del av den främmande nyckeln i en sql:relationship-annotation . (Observera att denna ändring inte påverkar spridningen av primärnyckelvärden till barnelement, vilket fortfarande sker för SQLXML 4.0 om inget värde uttryckligen anges för barnelementet.

  • Om du använder ett updategram för att ändra data i en binär kolumn (såsom SQL Server-bilddatatypen ) måste du tillhandahålla ett mappningsschema där SQL Server-datatypen (till exempel sql:datatype="image") och XML-datatypen (till exempel dt:type="binhex" eller dt:type="binbase64) måste specificeras. Data för den binära kolumnen måste specificeras i updategrammet; SQL:URL-kodningsannotationen som anges i mappningsschemat ignoreras av UpdateGram.

  • När du skriver ett XSD-schema, om värdet du anger för sql:relation eller sql:field-annotationen innehåller ett specialtecken, som ett mellanslag (till exempel i tabellen "Order Details"), måste detta värde vara inneslutet inom parentes (till exempel "[Order Details]").

  • När man använder updategrams stöds inte kedjerelationer. Till exempel, om tabellerna A och C är relaterade genom en kedjerelation som använder tabell B, kommer följande fel att uppstå när man försöker köra och köra updategrammet:

    There is an inconsistency in the schema provided.  
    

    Även om både schema och updategram annars är korrekta och giltigt bildade, uppstår detta fel om en kedjerelation finns.

  • Updategrams tillåter inte att bildtypdata skickas som parametrar under uppdateringar.

  • Binära stora objekttyper (BLOB) som text/ntext och bilder bör inte användas i <före-blocket> när man arbetar med updategram, eftersom detta inkluderar dem för samtidighetskontroll. Detta kan orsaka problem med SQL Server på grund av begränsningar i jämförelse för BLOB-typer. Till exempel används nyckelordet LIKE i WHERE-klausulen för att jämföra kolumner i textdatatypen ; dock kommer jämförelser att misslyckas i fallet med BLOB-typer där datastorleken är större än 8K.

  • Specialtecken i ntext-data kan orsaka problem med SQLXML 4.0 på grund av begränsningar i jämförelse för BLOB-typer. Till exempel kommer användningen av "[Serializable]" i <före-blocket> i en updategrams när den används vid samtidighetskontroll av en kolumn av ntext-typ att misslyckas med följande SQLOLEDB-felbeskrivning:

    Empty update, no updatable rows found   Transaction aborted  
    

Se även

Säkerhetsöverväganden för Updategram (SQLXML 4.0)