更新實體

Update Entity 作業會更新資料表中的現有實體。 作業 Update Entity 會取代整個實體,而且您可以使用 作業來移除屬性。

要求

您可以依照下列方式建構 Update Entity 要求。 建議使用 HTTPS。 以儲存體帳戶的名稱取代 myaccount ,並以 mytable 資料表的名稱取代 myaccount。 以識別要更新之實體的資料分割索引鍵和資料列索引鍵名稱取代 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-kibibyte (KiB) 設定記錄時記錄在記錄中的字元限制。 強烈建議您使用此標頭,將用戶端活動與伺服器收到的要求相互關聯。 如需詳細資訊,請參閱 監視 Azure 資料表儲存體

要求本文

作業 Update Entity 會傳送要更新為 OData 實體集的實體,可以是 JSON 或 Atom 摘要。 如需詳細資訊,請參閱 插入和更新實體

注意

JSON 是建議的承載格式,它是 2015-12-11 版和更新版本唯一支援的格式。

範例要求

JSON (2013-08-15 版和更新版本)

此範例顯示 JSON 摘要的範例要求 URI、相關聯的要求標頭和要求主體。

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  

授權

帳戶擁有者可以執行這項作業。 此外,具有共用存取簽章的任何人都可以執行這項作業。

備註

當您更新實體時,您必須將 和 RowKey 系統屬性指定 PartitionKey 為更新作業的一部分。

實體會 ETag 提供更新作業的預設開放式平行存取。 此值 ETag 不透明,不應讀取或依賴。 在更新作業發生之前,資料表儲存體會確認實體的目前 ETag 值與標頭中 If-Match 更新要求中包含的值相同 ETag 。 如果值相同,資料表儲存體會判斷實體自擷取後尚未修改,而且更新作業會繼續進行。

如果實體 ETag 與更新要求指定的不同,更新作業會失敗,狀態碼為 412 (前置條件失敗) 。 此錯誤表示伺服器上的實體自擷取後已經變更。 若要解決這個錯誤,請重新擷取實體並重新發出要求。

若要強制執行無條件更新作業,請將要求中的 If-Match 標頭值設為萬用字元 (*)。 將此值傳遞至作業會覆寫預設開放式平行存取,並忽略值中的任何 ETag 不符。

If-Match如果 2011-08-18 版或更新版本中的要求遺漏標頭,服務會執行Insert 或 Replace Entity (upsert) 作業。 在 2011-08-18 之前的版本中,服務會傳回狀態碼 400 (不正確的要求) 。

資料表儲存體不會保存 null 屬性的值。 指定具有 null 值的屬性相當於省略要求中的該屬性。

注意

您可以利用任一行為,從實體中移除屬性。

若要明確輸入屬性,請在 Atom 摘要中設定 m:type 屬性定義內的屬性,以指定適當的 OData 資料類型。 如需輸入屬性的詳細資訊,請參閱 插入和更新實體

任何可以授權和傳送 HTTP PUT 要求的應用程式都可以更新實體。

如需執行批次更新作業的相關資訊,請參閱 執行實體群組交易

另請參閱

合併實體
授權對 Azure 儲存體的要求
設定 OData 資料服務版本標頭
狀態和錯誤碼
資料表儲存體錯誤碼