다음을 통해 공유


Web API를 사용하여 테이블 행 업데이트 및 삭제

데이터를 수정하는 작업은 Web API의 핵심 부분입니다. 간단한 업데이트 및 삭제 작업 외에도 단일 테이블 열(엔터티 특성)에서 작업을 수행하고 존재하는지 여부에 따라 데이터를 업데이트하거나 삽입하는 upsert 요청을 작성할 수 있습니다.

기본 업데이트

업데이트 작업은 HTTP PATCH 동사를 사용합니다. 레코드를 나타내는 URI로 업데이트하려는 속성이 포함된 JSON 개체를 전달합니다. 업데이트에 성공하면 응답은 상태를 204 No Content반환합니다.

헤더 If-Match: *는 실수로 upsert 작업을 수행하여 새 레코드를 만드는 것을 방지합니다. 자세한 내용은 upsert에서 생성 방지를 참조하세요.

중요합니다

엔터티를 업데이트할 때는 변경 중인 속성만 요청 본문에 포함합니다. 이전에 검색한 엔터티의 모든 속성을 포함하여 엔터티를 업데이트하는 경우 값이 같더라도 작업이 각 속성을 업데이트합니다. 이 업데이트로 인해 값이 변경될 것으로 예상되는 비즈니스 논리를 트리거하는 시스템 이벤트가 발생할 수 있습니다. 실제로 변경되지 않은 경우 감사 데이터에서 속성이 업데이트되는 것처럼 보일 수 있습니다.

속성 statecode을 업데이트할 때는 항상 원하는 statuscode 값을 설정합니다. statecode 값과 statuscode 값은 서로 의존합니다. 지정된 statecode 값의 경우 유효한 statuscode 값이 여러 개 있을 수 있습니다. 그러나 각 statecode 열에는 단일 DefaultStatus 값이 구성되어 있습니다. 지정statuscode하지 않고 statecode 업데이트하면 시스템이 기본 상태 값을 설정합니다. 또한 테이블 및 statuscode 열에서 감사를 사용하도록 설정하면 업데이트 작업에서 지정하지 않는 한 열의 변경된 값 statuscode 이 감사 데이터에 캡처되지 않습니다.

비고

특성에 대한 정의에는 속성이 RequiredLevel 포함됩니다. 이 속성이 설정 SystemRequired되면 이러한 특성을 null 값으로 설정할 수 없습니다. 자세한 내용은 특성 요구 사항 수준을 참조하세요.

다음은 기존 계정 레코드를 00000000-0000-0000-0000-0000-00000000000001 값으로 accountid 업데이트하는 예제입니다.

요청:

PATCH [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001) HTTP/1.1  
Content-Type: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0
If-Match: *  
  
{  
    "name": "Updated Sample Account ",  
    "creditonhold": true,  
    "address1_latitude": 47.639583,  
    "description": "This is the updated description of the sample account",  
    "revenue": 6000000,  
    "accountcategorycode": 2  
}  

응답:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

비고

업데이트 시 엔터티 연결 및 연결 해제에 대한 자세한 내용은 단일 값 탐색 속성 사용을 참조하세요.

반환된 데이터로 업데이트

엔터티에서 데이터를 검색하고 업데이트하려면, 업데이트된 레코드의 데이터를 상태 코드 200 (OK)으로 반환하도록 PATCH 요청을 작성하세요. 이 결과를 얻으려면 요청 헤더를 Prefer: return=representation 사용합니다.

반환되는 속성을 제어하려면 엔터티 집합의 $select URL에 쿼리 옵션을 추가합니다. $expand 쿼리 옵션은 사용되는 경우 무시됩니다.

이 예제에서는 계정 엔터티를 업데이트하고 응답에서 요청된 데이터를 반환합니다.

요청:

PATCH [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)?$select=name,creditonhold,address1_latitude,description,revenue,accountcategorycode,createdon HTTP/1.1  
OData-MaxVersion: 4.0  
OData-Version: 4.0  
Accept: application/json  
Content-Type: application/json; charset=utf-8  
Prefer: return=representation
If-Match: * 
  
{"name":"Updated Sample Account"}  

응답:

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal  
Preference-Applied: return=representation  
OData-Version: 4.0  
  
{  
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts/$entity",  
    "@odata.etag": "W/\"536537\"",  
    "accountid": "00000000-0000-0000-0000-000000000001",  
    "accountcategorycode": 1,  
    "description": "This is the description of the sample account",  
    "address1_latitude": 47.63958,  
    "creditonhold": false,  
    "name": "Updated Sample Account",  
    "createdon": "2016-09-28T23:14:00Z",  
    "revenue": 5000000.0000,  
    "_transactioncurrencyid_value": "048dddaa-6f7f-e611-80d3-00155db5e0b6"  
}  
  

단일 요청으로 여러 레코드 업데이트

단일 요청에서 동일한 형식의 여러 레코드를 업데이트하는 가장 빠른 방법은 UpdateMultiple 작업을 사용하는 것입니다. 모든 표준 테이블이 이 작업을 지원하는 것은 아니지만 모든 탄력적 테이블은 지원합니다.

추가 정보:

단일 속성 값 업데이트

단일 속성 값을 업데이트하려면 요청을 사용하고 PUT 엔터티의 Uri에 속성 이름을 추가합니다.

다음 예제에서는 기존 name 행의 속성을 00000000-0000-0000-0000-000000000001accountid 값으로 업데이트합니다.

요청:

PUT [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)/name HTTP/1.1  
Content-Type: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  
  
{"value": "Updated Sample Account Name"}  

응답:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

단일 속성 값 삭제

단일 속성의 값을 삭제하려면 엔터티의 URI에 속성 이름이 추가된 요청을 사용합니다 DELETE .

다음 예제에서는 accountid의 값이 00000000-0000-0000-0000-000000000001인 계정 엔터티의 description 속성 값을 삭제합니다.

요청:

DELETE [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)/description HTTP/1.1  
Content-Type: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

응답:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
  

비고

이 방법은 단일 값 탐색 속성과 함께 사용하여 두 엔터티를 분리할 수 없습니다. 다른 방법은 단일 값 탐색 속성을 사용하여 연결 해제를 참조하세요.

테이블 행 upsert

upsert 작업은 업데이트와 유사합니다. 요청을 사용하고 PATCH URI를 사용하여 특정 레코드를 참조합니다. 차이점은 레코드가 없으면 레코드가 생성된다는 것입니다. 이미 있는 경우 업데이트됩니다.

Upsert는 외부 시스템 간에 데이터를 동기화할 때 유용합니다. 외부 시스템에 Dataverse 테이블의 기본 키에 대한 참조가 포함되지 않을 수 있으므로 두 시스템의 레코드를 고유하게 식별하는 외부 시스템의 값을 사용하여 Dataverse 테이블에 대한 대체 키를 구성할 수 있습니다. 추가 정보: 행을 참조하는 대체 키 정의

$metadata 서비스 문서의 엔터티 형식에 대한 주석에서 테이블에 대해 정의된 대체 키를 볼 수 있습니다. 추가 정보: 대체 키.

다음 예제에서는 sample_thing이라는 이름의 테이블이 있습니다. 이 테이블에는 두 개의 열, 즉 sample_key1sample_key2을 참조하는 대체 키가 있으며, 이들 열은 모두 정수 값을 저장하도록 정의되어 있습니다.

요청:

PATCH [Organization URI]/api/data/v9.2/sample_things(sample_key1=1,sample_key2=1) HTTP/1.1
Accept: application/json 
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Content-Type: application/json

{
    "sample_name": "1:1"
}

만들기 또는 업데이트 작업 모두에 대해 동일한 응답을 받습니다. 응답 헤더가 레코드의 OData-EntityId GUID 기본 키 식별자가 아닌 키 값을 사용하는 방법을 확인합니다.

응답:

HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [Organization URI]/api/data/v9.2/sample_things(sample_key1=1,sample_key2=1)

응답이 동일하기 때문에 Create 작업인지 Update 작업인지 알 수 없습니다.

알아야 할 경우 요청 헤더를 Prefer: return=representation 사용할 수 있습니다. 이 헤더를 사용하면 레코드를 201 Created 만들 때 응답이 표시되고 200 OK 레코드가 업데이트되면 응답이 표시됩니다. 이 옵션은 성능에 Retrieve 영향을 주는 작업을 추가합니다. 요청 헤더 Prefer: return=representation를 사용하는 경우, $select에 최소한의 데이터로 기본 키 열만 포함되도록 해야 합니다. 추가 정보: 반환된 데이터로 업데이트 하고 반환된 데이터를 사용하여 만듭니다.

대체 키를 사용하는 경우 요청 본문에 대체 키 값을 포함하지 마세요.

  • upsert가 해당 Update값을 나타내는 경우 이러한 대체 키 값은 무시됩니다. 대체 키 값을 사용하여 레코드를 식별하는 동안에는 업데이트할 수 없습니다.
  • upsert가 Create을 나타내는 경우, 본문에 없는 경우 URL의 키 값이 해당 레코드에 대해 설정됩니다. 따라서 요청 본문에 포함할 필요가 없습니다.

추가 정보: Upsert를 사용하여 레코드 만들기 또는 업데이트

비고

일반적으로 새 레코드를 만들 때 시스템에서 기본 키에 대한 GUID 값을 할당할 수 있습니다. 이 방법은 시스템에서 인덱스에 최적화된 키를 생성하고 이 옵션을 선택하면 성능이 향상되기 때문에 가장 좋습니다. 그러나 키 GUID 값이 외부 시스템에 upsert 의해 생성되는 경우와 같이 특정 기본 키 값으로 레코드를 만들어야 하는 경우 이 작업을 수행하는 방법을 제공합니다.

upsert를 사용하여 만들기 또는 업데이트 방지

경우에 따라 upsert 작업을 수행하고 싶지만, 특정 작업(생성 또는 업데이트)을 방지하려고 할 때가 있습니다. If-Match 또는 If-None-Match 헤더를 사용하여 이러한 작업을 방지할 수 있습니다. 자세한 내용은 upsert 작업 제한을 참조하세요.

기본 삭제

삭제 작업은 간단합니다. 삭제하려는 엔터티의 URI와 함께 DELETE 동사를 사용합니다. 다음은 기본 키 accountid 값이 00000000-0000-0000-0000-000000000001인 계정 엔터티를 삭제하는 예제 메시지입니다.

요청:

DELETE [Organization URI]/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001) HTTP/1.1  
Content-Type: application/json  
OData-MaxVersion: 4.0  
OData-Version: 4.0  

응답:

엔터티가 있는 경우 삭제가 성공했음을 나타내기 위해 상태 204와 함께 일반적인 응답을 받습니다. 엔터티를 찾을 수 없는 경우 상태 404로 응답을 받습니다.

HTTP/1.1 204 No Content  
OData-Version: 4.0  

중복 레코드 확인

업데이트 작업 중에 중복 레코드를 확인하는 방법에 대한 자세한 내용은 Web API를 사용하여 업데이트 작업 중 중복 검색을 참조하세요.

단일 요청에서 여러 레코드 삭제

단일 요청에서 동일한 형식의 여러 레코드를 삭제하려면 작업을 사용합니다 DeleteMultiple . 표준 테이블은 이 DeleteMultiple 작업을 지원하지 않지만 모든 탄력적 테이블은 지원합니다.

비고

표준 테이블의 경우 BulkDelete 작업을 사용합니다. 이 작업을 사용하면 쿼리와 일치하는 레코드를 비동기식으로 삭제할 수 있습니다. 자세한 내용은 대량으로 데이터 삭제를 참조하세요.

추가 정보:

스토리지 파티션에서 문서 업데이트 및 삭제

파티션에 저장된 탄력적 테이블 데이터를 업데이트하거나 삭제하는 경우 해당 데이터에 액세스할 때 파티션 키를 지정합니다.

추가 정보: PartitionId 값 선택

참고하십시오

Web API 기본 작업 샘플(C#)
Web API 기본 작업 샘플(클라이언트 쪽 JavaScript)
Web API를 사용하여 작업 수행
Http 요청 작성 및 오류 처리
웹 API를 사용하여 데이터 쿼리
Web API를 사용하여 테이블 행 만들기
Web API를 사용하여 테이블 행 검색
Web API를 사용하여 테이블 행 연결 및 연결 해제
Web API 함수 사용
웹 API 작업 사용
Web API를 사용하여 일괄 처리 작업 실행
Web API를 사용하여 다른 사용자를 가장하기
Web API를 사용하여 조건부 작업 수행