你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

更新实体

Update Entity操作更新表中现有实体。 操作 Update Entity 将替换整个实体,你可以使用 操作删除属性。

请求

可以按如下所示构造 Update Entity 请求。 建议使用 HTTPS。 将 myaccount 替换为存储帐户的名称,将 mytable 替换为表的名称。 将 myPartitionKeymyRowKey 替换为标识要更新的实体的分区键和行键的名称。

方法 请求 URI HTTP 版本
PUT https://myaccount.table.core.windows.net/mytable(PartitionKey='myPartitionKey', RowKey='myRowKey') HTTP/1.1

要更新的实体的地址可以在请求 URI 上采用多种形式。 有关更多详细信息,请参阅 OData 协议

模拟存储服务 URI

对模拟存储服务发出请求时,请将模拟器主机名和 Azure 表存储端口指定为 127.0.0.1:10002,后跟模拟的存储帐户名称。

方法 请求 URI HTTP 版本
PUT http://127.0.0.1:10002/devstoreaccount1/mytable(PartitionKey='myPartitionKey', RowKey='myRowKey') HTTP/1.1

存储模拟器中的表存储在多个方面与 Azure 表存储不同。 有关详细信息,请参阅 存储模拟器与 Azure 存储服务之间的差异

URI 参数

可以在请求 URI 上指定以下附加参数。

参数 说明
timeout 可选。 timeout 参数以秒表示。 有关详细信息,请参阅 设置表存储操作的超时

请求标头

下表介绍必需的和可选的请求标头。

请求标头 说明
Authorization 必需。 指定授权方案、帐户名称和签名。 有关详细信息,请参阅授权对 Azure 存储的请求
Datex-ms-date 必需。 指定请求的协调世界时 (UTC)。 有关详细信息,请参阅授权对 Azure 存储的请求
x-ms-version 可选。 指定用于此请求的操作的版本。 有关详细信息,请参阅 Azure 存储服务的版本控制
Content-Type 必需。 指定有效负载的内容类型。 可能值为 application/atom+xmlapplication/json

有关有效内容类型的详细信息,请参阅 表存储操作的有效负载格式
Content-Length 必需。 请求正文的长度。
If-Match 必需。 客户端可以针对请求中的实体指定 ETag ,以便与服务维护的 进行比较 ETag ,以实现乐观并发。 仅当客户端发送的 与服务器维护的值匹配时 ETag ,才会执行更新操作。 此匹配表示自客户端检索实体以来尚未修改该实体。

要强制进行无条件更新,请将 If-Match 设置为通配符 (*)。
x-ms-client-request-id 可选。 提供客户端生成的不透明值,其中包含 1-kibite (KiB) 配置日志记录时记录在日志中的字符限制。 强烈建议使用此标头将客户端活动与服务器接收的请求相关联。 有关详细信息,请参阅 监视 Azure 表存储

请求正文

操作 Update Entity 将实体作为实体集(可以是 JSON 或 Atom 源)发送要更新 OData 的实体。 有关详细信息,请参阅 插入和更新实体

注意

JSON 是建议的有效负载格式,也是版本 2015-12-11 及更高版本支持的唯一格式。

示例请求

JSON (版本 2013-08-15 及更高版本)

此示例介绍请求 URI 示例、相关联的请求标头以及 JSON 馈送的请求正文。

Request Headers:  
x-ms-version: 2015-12-11  
Accept-Charset: UTF-8  
Content-Type: application/json  
If-Match: *  
x-ms-date: Mon, 27 Jun 2016 18:10:24 GMT  
Authorization: SharedKeyLite myaccount:u0sWZKmjBD1B7LY/CwXWCnHdqK4B1P4z8hKy9SVW49o=  
Content-Length: ###  
DataServiceVersion: 3.0;NetFx  
MaxDataServiceVersion: 3.0;NetFx  
  
{  
   "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"  
}  

Atom 馈送 (早于 2015-12-11)

此示例显示了示例请求 URI、关联的请求标头以及 Atom 源的请求正文。

Request URI:  
https://myaccount.table.core.windows.net/mytable(PartitionKey='myPartitionKey',RowKey='myRowKey')  
  
Request Headers:  
x-ms-version: 2013-08-15  
Accept: application/atom+xml,application/xml  
Accept-Charset: UTF-8  
Content-Type: application/atom+xml  
If-Match: *  
x-ms-date: Wed, 20 Nov 2013 18:10:24 GMT  
Authorization: SharedKeyLite myaccount:u0sWZKmjBD1B7LY/CwXWCnHdqK4B1P4z8hKy9SVW49o=  
Content-Length: ###  
DataServiceVersion: 1.0;NetFx  
MaxDataServiceVersion: 2.0;NetFx  
  
Request Body:  
<?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="http://www.w3.org/2005/Atom">  
  <title />  
  <updated>2008-09-18T23:46: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>myrowkey</d:RowKey>  
    </m:properties>  
  </content>  
</entry>  

响应

响应包括 HTTP 状态代码和一组响应标头。

状态代码

成功的操作将返回状态代码 204(无内容)。 有关状态代码的信息,请参阅 状态和错误代码表存储错误代码

响应头

响应包含以下标头。 响应还可以包含其他标准 HTTP 标头。 所有标准标头都符合 HTTP/1.1 协议规范

响应标头 说明
ETag ETag实体的 。
x-ms-request-id 此标头唯一标识发出的请求,可用于对请求进行故障排除。 有关详细信息,请参阅 API 操作故障排除
x-ms-version 指示用于运行请求的表存储的版本。 针对 2009-09-19 和更高版本发出的请求将返回此标头。
Date 指示启动响应的时间的 UTC 日期/时间值。 服务生成此值。
x-ms-client-request-id 可以使用此标头对请求和相应的响应进行故障排除。 如果请求中存在,则此标头的值等于 标头的值 x-ms-client-request-id 。 该值最多为 1,024 个可见 ASCII 字符。 x-ms-client-request-id如果请求中不存在标头,则响应中不会显示此标头。

响应正文

无。

示例响应

Response Status:  
HTTP/1.1 204 No Content  
  
Response Headers:  
Connection: Keep-Alive  
x-ms-request-id: 2c085f8f-11a4-4e1d-bd49-82c6bd87649d  
Content-Length: 0  
Cache-Control: no-cache  
Date: Mon, 27 Jun 2016 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  

授权

帐户所有者可以执行此操作。 此外,具有共享访问签名且有权执行此操作的任何人都可以执行此操作。

注解

更新实体时,必须在更新操作中指定 PartitionKeyRowKey 系统属性。

实体的 ETag 为更新操作提供默认的乐观并发。 该值 ETag 是不透明的,不应读取或依赖该值。 在更新操作发生之前,表存储会验证实体的当前 ETag 值是否与 ETag 标头中的 If-Match 更新请求中包含的值相同。 如果值相同,则表存储确定该实体自检索以来尚未修改,然后继续执行更新操作。

如果实体的 ETag 与更新请求中指定的不同,则更新操作将失败,状态代码为 412 (前置条件失败) 。 此错误表明在检索实体后在服务器上更改了该实体。 要解决该错误,请重新检索实体并重新发出请求。

若要强制执行无条件更新操作,请将请求中 If-Match 标头的值设置为通配符 (*)。 将此值传递给操作会替代默认的乐观并发,并忽略值中的任何 ETag 不匹配。

If-Match如果在版本 2011-08-18 或更高版本中的请求中缺少标头,则服务将执行插入或替换实体 (更新插入) 操作。 在早于 2011-08-18 的版本中,服务返回状态代码 400 (错误的请求) 。

表存储不保留 null 属性的值。 使用值指定属性 null 等效于在请求中省略该属性。

注意

可以利用这两种行为从实体中删除属性。

若要显式键入属性,请通过在 Atom 馈送中的属性定义中设置 属性来m:type指定适当的OData数据类型。 有关键入属性的详细信息,请参阅 插入和更新实体

可以授权和发送 HTTP PUT 请求的任何应用程序都可以更新实体。

有关执行批量更新操作的信息,请参阅 执行实体组事务

另请参阅

合并实体
授权对 Azure 存储的请求
设置 OData 数据服务版本标头
状态和错误代码
表存储错误代码