Insertion ou fusion d'entité

L’opération Insert Or Merge Entity met à jour une entité existante ou insère une nouvelle entité si elle n’existe pas dans la table. Étant donné que cette opération peut insérer ou mettre à jour une entité, elle est également appelée opération upsert .

Requête

Vous pouvez construire la Insert Or Merge Entity requête comme suit. HTTPS est recommandé. Remplacez les valeurs suivantes par les vôtres :

  • myaccount par le nom de votre compte de stockage

  • mytable par le nom de votre table

  • myPartitionKey et myRowKey avec le nom de la clé de partition et de la clé de ligne pour l’entité à mettre à jour

Méthode URI de demande Version HTTP
MERGE https://myaccount.table.core.windows.net/mytable(PartitionKey='myPartitionKey', RowKey='myRowKey') HTTP/1.1

Service de stockage émulé

Lorsque vous effectuez une requête auprès du service de stockage émulé, spécifiez le nom d’hôte de l’émulateur et le port de stockage Table Azure comme 127.0.0.1:10002, suivi du nom du compte de stockage émulé.

Méthode URI de demande Version HTTP
MERGE http://127.0.0.1:10002/devstoreaccount1/mytable(PartitionKey='myPartitionKey', RowKey='myRowKey') HTTP/1.1

Le stockage table dans l’émulateur de stockage diffère du stockage Table Azure de plusieurs façons. Pour plus d’informations, consultez Différences entre l’émulateur de stockage et les services de stockage Azure.

Paramètres URI

Vous pouvez spécifier le paramètre supplémentaire suivant sur l’URI de la demande.

Paramètre Description
timeout facultatif. Le paramètre timeout est exprimé en secondes. Pour plus d’informations, consultez Définition des délais d’expiration pour les opérations de stockage table.

En-têtes de requête

Le tableau suivant décrit les en-têtes de demande obligatoires ou facultatifs.

En-tête de requête Description
Authorization Obligatoire. Spécifie le schéma d’autorisation, le nom du compte et la signature. Pour plus d’informations, consultez Autoriser les requêtes auprès du Stockage Azure.
Date ou x-ms-date Obligatoire. Spécifie la date/heure en temps universel coordonné (UTC) pour la requête. Pour plus d’informations, consultez Autoriser les requêtes auprès du Stockage Azure.
x-ms-version Obligatoire. Doit être défini sur 2011-08-18 ou version ultérieure. Spécifie la version de l'opération à utiliser pour cette demande. Pour plus d'informations, consultez la page Contrôle de version pour les services de Stockage Microsoft Azure.
Content-Type Obligatoire. Spécifie le type de contenu de la charge utile. Les valeurs possibles sont application/atom+xml et application/json.

Pour plus d’informations sur les types de contenu valides, consultez Format de charge utile pour les opérations de stockage table.
Content-Length Obligatoire. Longueur du corps de la demande.
x-ms-client-request-id Optionnel. Fournit une valeur opaque générée par le client avec une limite de caractères de 1 kibioctet (Kio) enregistrée dans les journaux lors de la configuration de la journalisation. Nous vous recommandons vivement d’utiliser cet en-tête pour mettre en corrélation les activités côté client avec les demandes que le serveur reçoit. Pour plus d’informations, consultez Surveiller le Stockage Table Azure.

Corps de la demande

L’opération Insert Or Merge Entity envoie l’entité à insérer en tant que jeu d’entités OData . Ce jeu d’entités peut être une charge utile Atom ou JSON. Pour plus d’informations, consultez Insertion et mise à jour d’entités.

Notes

JSON est le format de charge utile recommandé et est le seul format pris en charge pour la version 2015-12-11 et ultérieure.

response

La réponse inclut un code d'état HTTP et un ensemble d'en-têtes de réponse.

Code d’état

Une opération réussie renvoie le code d'état 204 (No Content). Pour plus d’informations sur les codes status, consultez Codes d’état et d’erreur et Codes d’erreur de stockage table.

En-têtes de réponse

Cette réponse comprend les en-têtes suivants. La réponse peut également inclure des en-têtes HTTP standard supplémentaires. Tous les en-têtes standard sont conformes à la spécification du protocole HTTP/1.1.

En-tête de réponse Description
ETag ETag pour l’entité .
x-ms-request-id Identifie de manière unique la requête qui a été effectuée et peut être utilisée pour la résolution des problèmes de la demande. Pour plus d’informations, consultez Résolution des problèmes liés aux opérations d’API.
x-ms-version Indique la version de Stockage Table utilisée pour exécuter la requête. Cet en-tête est renvoyé pour les demandes effectuées avec la version 2009-09-19 ou une version ultérieure.
Date Valeur de date/heure UTC qui indique l’heure à laquelle la réponse a été lancée. Le service génère cette valeur.
x-ms-client-request-id Peut être utilisé pour résoudre les problèmes liés aux demandes et aux réponses correspondantes. La valeur de cet en-tête est égale à la valeur de l’en-tête x-ms-client-request-id , s’il est présent dans la requête. La valeur est au maximum de 1 024 caractères ASCII visibles. Si l’en-tête x-ms-client-request-id n’est pas présent dans la demande, il ne sera pas présent dans la réponse.

Response body

Aucun.

Autorisation

Le propriétaire du compte peut effectuer cette opération. En outre, toute personne disposant d’une signature d’accès partagé qui est autorisée à effectuer cette opération peut le faire.

Exemple de requête et de réponse

Les exemples suivants montrent des exemples de demandes qui utilisent des flux JSON et Atom.

Notes

JSON est le format de charge utile recommandé et est le seul format pris en charge pour la version 2015-12-11 et ultérieure.

JSON (version 2013-08-15 et ultérieures)

Voici un exemple de demande et de réponse qui utilise JSON.

MERGE https://myaccount.table.core.windows.net/mytable(PartitionKey='myPartitionKey',RowKey='myRowKey')  

La demande est envoyée avec les en-têtes suivants :

x-ms-version: 2013-08-15  
Content-Type: application/json  
x-ms-date: Tue, 30 Aug 2013 18:10:24 GMT  
Authorization: SharedKeyLite myaccount:u0sWZKmjBD1B7LY/CwXWCnHdqK4B1P4z8hKy9SVW49o=  
Content-Length: 1135  
DataServiceVersion: 3.0;NetFx  
MaxDataServiceVersion: 3.0;NetFx  

La demande est envoyée avec le corps JSON suivant :

{  
   "Address":"Santa Clara",  
   "Age":23,  
   "AmountDue":200.23,  
   "CustomerCode@odata.type":"Edm.Guid",  
   "CustomerCode":"c9da6455-213d-42c9-9a79-3e9149a57833",  
   "CustomerSince@odata.type":"Edm.DateTime",  
   "CustomerSince":"2008-07-10T00:00:00",  
   "IsActive":false,  
   "NumberOfOrders@odata.type":"Edm.Int64",  
   "NumberOfOrders":"255",  
   "PartitionKey":"mypartitionkey",  
   "RowKey":"myrowkey"  
}  

Une fois la demande envoyée, la réponse suivante est renvoyée :

  
HTTP/1.1 204 No Content  
  
Connection: Keep-Alive  
x-ms-request-id: 2c085f8f-11a4-4e1d-bd49-82c6bd87649d  
Content-Length: 0  
Cache-Control: no-cache  
Date: Tue, 30 Aug 2013 18:12:54 GMT  
ETag: W/"0x5B168C7B6E589D2"  
DataServiceVersion: 3.0;NetFx  
MaxDataServiceVersion: 3.0;NetFx  
Server: Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0  

Flux Atom (versions antérieures à 2015-12-11)

Voici un exemple de demande et de réponse qui utilise Atom :

MERGE https://myaccount.table.core.windows.net/mytable(PartitionKey='myPartitionKey',RowKey='myRowKey')  

La demande est envoyée avec les en-têtes suivants :

x-ms-version: 2013-08-15  
Accept: application/atom+xml,application/xml  
Accept-Charset: UTF-8  
Content-Type: application/atom+xml  
x-ms-date: Tue, 12 Nov 2013 18:10:24 GMT  
Authorization: SharedKeyLite myaccount:u0sWZKmjBD1B7LY/CwXWCnHdqK4B1P4z8hKy9SVW49o=  
Content-Length: 1135  
DataServiceVersion: 1.0;NetFx  
MaxDataServiceVersion: 2.0;NetFx  

La demande est envoyée avec le corps XML suivant :

<?xml version="1.0" encoding="utf-8"?>  
<entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="https://www.w3.org/2005/Atom">  
  <title />  
  <updated>2013-11-12T18:09:37.168836Z</updated>  
  <author>  
    <name />  
  </author>  
<id>https://myaccount.table.core.windows.net/mytable(PartitionKey='mypartitionkey',RowKey='myrowkey')</id>  
  <content type="application/xml">  
    <m:properties>  
      <d:Address>Santa Clara</d:Address>  
      <d:Age m:type="Edm.Int32">23</d:Age>  
      <d:AmountDue m:type="Edm.Double">200.23</d:AmountDue>  
      <d:CustomerCode m:type="Edm.Guid">c9da6455-213d-42c9-9a79-3e9149a57833</d:CustomerCode>  
      <d:CustomerSince m:type="Edm.DateTime">2008-07-10T00:00:00Z</d:CustomerSince>  
      <d:IsActive m:type="Edm.Boolean">false</d:IsActive>  
      <d:NumOfOrders m:type="Edm.Int64">255</d:NumOfOrders>  
      <d:PartitionKey>mypartitionkey</d:PartitionKey>  
      <d:RowKey>myrowkey1</d:RowKey>  
    </m:properties>  
  </content>  
</entry>  

Une fois la demande envoyée, la réponse suivante est renvoyée :

HTTP/1.1 204 No Content  
  
Connection: Keep-Alive  
x-ms-request-id: 2c085f8f-11a4-4e1d-bd49-82c6bd87649d  
Content-Length: 0  
Cache-Control: no-cache  
Date: Tue, 12 Nov 2013 18:12:54 GMT  
ETag: W/"0x5B168C7B6E589D2"  
DataServiceVersion: 1.0;NetFx  
MaxDataServiceVersion: 2.0;NetFx  
Server: Windows-Azure-Table/1.0 Microsoft-HTTPAPI/2.0  

Notes

L’opération Insert Or Merge Entity utilise le MERGE verbe . Vous devez appeler l’opération à l’aide de la version 2011-08-18 ou ultérieure. En outre, cette opération n’utilise pas l’en-tête If-Match . Ces attributs différencient cette opération de l'opération Update Entity, bien que le corps de la demande soit identique pour ces deux opérations.

Si vous utilisez l’opération Insert Or Merge Entity pour fusionner une entité, toutes les propriétés de l’entité précédente sont conservées, si la demande ne les définit pas ou ne les inclut pas. Les propriétés avec une null valeur sont également conservées.

Lorsque vous appelez l’opérationInsert or Merge Entity, vous devez spécifier des valeurs pour les PartitionKey propriétés système et .RowKey Ensemble, ces propriétés forment la clé primaire et doivent être uniques dans la table.

PartitionKey Les valeurs et doivent RowKey être des valeurs de chaîne. Chaque valeur de clé peut atteindre 64 Kio. Si vous utilisez une valeur entière pour la valeur de clé, vous devez convertir l’entier en chaîne à largeur fixe. C’est parce qu’ils sont triés canoniquement. Par exemple, convertissez la valeur 1 en 0000001 pour garantir un tri correct.

Pour taper explicitement une propriété, spécifiez le type approprié OData en définissant l’attribut m:type dans la définition de propriété dans le flux Atom. Pour plus d’informations sur la saisie des propriétés, consultez Insertion et mise à jour d’entités.

Toute application qui peut autoriser et envoyer une HTTP MERGE demande peut insérer ou mettre à jour une entité.

Pour plus d’informations sur l’exécution d’opérations d’upsert par lots, consultez Exécution de transactions de groupe d’entités.

Voir aussi

Autoriser les demandes dans le Stockage Azure
Définition des en-têtes de version du service de données OData
Insertion et mise à jour d’entités
Codes d’état et d’erreur
Codes d’erreur stockage table