エンティティの更新
Update Entity
操作は、テーブル内の既存のエンティティを更新します。 操作によって Update Entity
エンティティ全体が置き換えられ、操作を使用してプロパティを削除できます。
要求
要求は Update Entity
次のように構築できます。 HTTPS が推奨されます。
myaccount をストレージ アカウントの名前に置き換えmytable
、テーブルの名前に置き換えます。
myPartitionKey と myRowKey を、更新するエンティティを識別するパーティション キーと行キーの名前に置き換えます。
Method | 要求 URI | HTTP バージョン |
---|---|---|
PUT |
https://myaccount.table.core.windows.net/mytable(PartitionKey='myPartitionKey', RowKey='myRowKey') |
HTTP/1.1 |
更新するエンティティのアドレスは、要求 URI で複数のフォームを取得できます。 詳細については、 OData プロトコル に関するページを参照してください。
エミュレートされたストレージ サービス URI
エミュレートされたストレージ サービスに対して要求を行う場合は、エミュレーターのホスト名と Azure Table Storage ポートを として 127.0.0.1:10002
指定し、その後にエミュレートされたストレージ アカウント名を指定します。
Method | 要求 URI | HTTP バージョン |
---|---|---|
PUT |
http://127.0.0.1:10002/devstoreaccount1/mytable(PartitionKey='myPartitionKey', RowKey='myRowKey') |
HTTP/1.1 |
ストレージ エミュレーターの Table Storage は、Azure Table Storage といくつかの点で異なります。 詳細については、「 ストレージ エミュレーターと Azure Storage サービスの違い」を参照してください。
URI パラメーター
要求 URI には、次の追加パラメーターを指定できます。
パラメーター | 説明 |
---|---|
timeout |
省略可能。
timeout パラメーターは、秒単位で表されます。 詳細については、「 Table Storage 操作のタイムアウトの設定」を参照してください。 |
要求ヘッダー
必須要求ヘッダーと省略可能な要求ヘッダーを次の表に示します。
要求ヘッダー | 説明 |
---|---|
Authorization |
必須。 承認スキーム、アカウント名、署名を指定します。 詳細については、「Azure Storage への要求を承認する」をご覧ください。 |
Date または x-ms-date |
必須。 要求に対して協定世界時 (UTC) を指定します。 詳細については、「Azure Storage への要求を承認する」をご覧ください。 |
x-ms-version |
省略可能。 この要求に使用する操作のバージョンを指定します。 詳細については、「Azure Storage サービスのバージョン管理」を参照してください。 |
Content-Type |
必須。 ペイロードのコンテンツ タイプを指定します。 設定可能な値は application/atom+xml および application/json です。有効なコンテンツ タイプの詳細については、「 Table Storage 操作のペイロード形式」を参照してください。 |
Content-Length |
必須。 要求本文の長さです。 |
If-Match |
必須。 クライアントは、オプティミスティック コンカレンシーを目的として、サービスによって管理されている と比較ETag するために、要求でエンティティの を指定ETag できます。 更新操作は、クライアントによって送信された が ETag サーバーによって管理されている値と一致する場合にのみ実行されます。 この一致は、エンティティがクライアントによって取得されてから変更されていないことを示します。無条件更新を強制するには、 If-Match をワイルドカード文字 (*) に設定します。 |
x-ms-client-request-id |
省略可能。 ログ記録の構成時にログに記録される 1 kibibyte (KiB) 文字制限を使用して、クライアントによって生成された不透明な値を提供します。 このヘッダーを使用して、クライアント側のアクティビティとサーバーが受信する要求を関連付けるよう強くお勧めします。 詳細については、「 Azure Table Storage の監視」を参照してください。 |
要求本文
この操作により Update Entity
、エンティティ セットとして OData
更新されるエンティティが送信されます。これは、JSON または Atom フィードのいずれかになります。 詳細については、「 エンティティの挿入と更新」を参照してください。
注意
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 (No Content) が返されます。 状態コードの詳細については、「 状態とエラー コード 」および 「Table Storage のエラー コード」を参照してください。
応答ヘッダー
応答には次のヘッダーが含まれます。 応答には、追加の標準 HTTP ヘッダーを含めることもできます。 すべての標準ヘッダーは 、HTTP/1.1 プロトコル仕様に準拠しています。
応答ヘッダー | 説明 |
---|---|
ETag |
ETag エンティティの 。 |
x-ms-request-id |
このヘッダーは、行われた要求を一意に識別し、要求のトラブルシューティングに使用できます。 詳細については、「 API 操作のトラブルシューティング」を参照してください。 |
x-ms-version |
要求の実行に使用される Table Storage のバージョンを示します。 このヘッダーはバージョン 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
承認
アカウント所有者は、この操作を実行できます。 さらに、この操作を実行するアクセス許可を持つ共有アクセス署名を持つすべてのユーザーがこれを行うことができます。
注釈
エンティティを更新するときは、更新操作の PartitionKey
一部として および RowKey
システム プロパティを指定する必要があります。
エンティティの ETag
は、更新操作の既定のオプティミスティック コンカレンシーを提供します。 値は ETag
不透明であり、読み取ったり依存したりしないでください。 更新操作が発生する前に、Table Storage はエンティティの現在ETag
の値がヘッダーの更新要求If-Match
に含まれる値と同じETag
であることを確認します。 値が同一の場合、Table Storage はエンティティが取得されてから変更されていないことを判断し、更新操作が続行されます。
エンティティ ETag
が更新要求で指定されたエンティティと異なる場合、更新操作は状態コード 412 (前提条件に失敗) で失敗します。 このエラーは、取得後にサーバーでエンティティが変更されたことを示します。 このエラーを解決するには、エンティティを再度取得し、要求を再発行します。
無条件更新操作を強制するには、要求で If-Match
ヘッダーの値をワイルドカード文字 (*) に設定します。 この値を操作に渡すと、既定のオプティミスティック コンカレンシーがオーバーライドされ、値の ETag
不一致は無視されます。
If-Match
バージョン 2011-08-18 以降の要求にヘッダーがない場合、サービスはエンティティの挿入または置換 (upsert) 操作を実行します。 2011-08-18 より前のバージョンでは、サービスは状態コード 400 (無効な要求) を返します。
Table Storage では、プロパティの値は保持 null
されません。 値を持つプロパティを null
指定することは、要求でそのプロパティを省略することと同じです。
注意
どちらの動作も利用して、エンティティからプロパティを削除できます。
プロパティを明示的に入力するには、Atom フィードのプロパティ定義内で 属性をm:type
設定して、適切なOData
データ型を指定します。 プロパティの入力の詳細については、「 エンティティの挿入と更新」を参照してください。
HTTP PUT
要求を承認および送信できるアプリケーションは、エンティティを更新できます。
バッチ更新操作の実行については、「 エンティティ グループ トランザクションの実行」を参照してください。
関連項目
エンティティの統合
Azure Storage への要求を承認する
OData データ サービスのバージョン ヘッダーの設定
状態コードとエラー コード
Table Storage のエラー コード