Sample code for 30+ languages & platforms
SQL Server

DynamoDB - UpdateItem

See more Amazon DynamoDB Examples

Edits an existing item's attributes, or adds a new item to the table if it does not already exist. You can put, delete, or add attribute values. You can also perform a conditional update on an existing item (insert a new attribute name-value pair if it doesn't exist, or replace an existing name-value pair if it has certain expected attribute values).

Chilkat SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    DECLARE @iTmp0 int
    -- Important: Do not use nvarchar(max).  See the warning about using nvarchar(max).
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

    DECLARE @rest int
    EXEC @hr = sp_OACreate 'Chilkat.Rest', @rest OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    -- Implements the following CURL command:

    -- curl -X POST https://dynamodb.us-west-2.amazonaws.com/ \
    --   -H "Accept-Encoding: identity" \
    --   -H "Content-Type: application/x-amz-json-1.0" \
    --   -H "Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature>" \
    --   -H "X-Amz-Date: <Date>" \
    --   -H "X-Amz-Target: DynamoDB_20120810.UpdateItem" \
    --   -d '{
    --     "TableName": "Thread",
    --     "Key": {
    --         "ForumName": {
    --             "S": "Amazon DynamoDB"
    --         },
    --         "Subject": {
    --             "S": "Maximum number of items?"
    --         }
    --     },
    --     "UpdateExpression": "set LastPostedBy = :val1",
    --     "ConditionExpression": "LastPostedBy = :val2",
    --     "ExpressionAttributeValues": {
    --         ":val1": {"S": "alice@example.com"},
    --         ":val2": {"S": "fred@example.com"}
    --     },
    --     "ReturnValues": "ALL_NEW"
    -- }'

    -- Use the following online tool to generate REST code from a CURL command
    -- Convert a cURL Command to REST Source Code

    DECLARE @authAws int
    EXEC @hr = sp_OACreate 'Chilkat.AuthAws', @authAws OUT

    EXEC sp_OASetProperty @authAws, 'AccessKey', 'AWS_ACCESS_KEY'
    EXEC sp_OASetProperty @authAws, 'SecretKey', 'AWS_SECRET_KEY'
    -- Don't forget to change the region to your particular region. (Also make the same change in the call to Connect below.)
    EXEC sp_OASetProperty @authAws, 'Region', 'us-west-2'
    EXEC sp_OASetProperty @authAws, 'ServiceName', 'dynamodb'
    -- SetAuthAws causes Chilkat to automatically add the following headers: Authorization, X-Amz-Date
    EXEC sp_OAMethod @rest, 'SetAuthAws', @success OUT, @authAws

    -- URL: https://dynamodb.us-west-2.amazonaws.com/
    DECLARE @bTls int
    SELECT @bTls = 1
    DECLARE @port int
    SELECT @port = 443
    DECLARE @bAutoReconnect int
    SELECT @bAutoReconnect = 1
    EXEC sp_OAMethod @rest, 'Connect', @success OUT, 'dynamodb.us-west-2.amazonaws.com', @port, @bTls, @bAutoReconnect
    IF @success <> 1
      BEGIN

        EXEC sp_OAGetProperty @rest, 'ConnectFailReason', @iTmp0 OUT
        PRINT 'ConnectFailReason: ' + @iTmp0
        EXEC sp_OAGetProperty @rest, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @rest
        EXEC @hr = sp_OADestroy @authAws
        RETURN
      END

    -- Note: The above code does not need to be repeatedly called for each REST request.
    -- The rest object can be setup once, and then many requests can be sent.  Chilkat will automatically
    -- reconnect within a FullRequest* method as needed.  It is only the very first connection that is explicitly
    -- made via the Connect method.

    -- Use this online tool to generate code from sample JSON:
    -- Generate Code to Create JSON

    -- The following JSON is sent in the request body.

    -- {
    --   "TableName": "Thread",
    --   "Key": {
    --     "ForumName": {
    --       "S": "Amazon DynamoDB"
    --     },
    --     "Subject": {
    --       "S": "Maximum number of items?"
    --     }
    --   },
    --   "UpdateExpression": "set LastPostedBy = :val1",
    --   "ConditionExpression": "LastPostedBy = :val2",
    --   "ExpressionAttributeValues": {
    --     ":val1": {
    --       "S": "alice@example.com"
    --     },
    --     ":val2": {
    --       "S": "fred@example.com"
    --     }
    --   },
    --   "ReturnValues": "ALL_NEW"
    -- }

    DECLARE @json int
    EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT

    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'TableName', 'Thread'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'Key.ForumName.S', 'Amazon DynamoDB'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'Key.Subject.S', 'Maximum number of items?'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'UpdateExpression', 'set LastPostedBy = :val1'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'ConditionExpression', 'LastPostedBy = :val2'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'ExpressionAttributeValues.:val1.S', 'alice@example.com'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'ExpressionAttributeValues.:val2.S', 'fred@example.com'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'ReturnValues', 'ALL_NEW'

    EXEC sp_OAMethod @rest, 'AddHeader', @success OUT, 'Content-Type', 'application/x-amz-json-1.0'
    EXEC sp_OAMethod @rest, 'AddHeader', @success OUT, 'X-Amz-Target', 'DynamoDB_20120810.UpdateItem'
    EXEC sp_OAMethod @rest, 'AddHeader', @success OUT, 'Accept-Encoding', 'identity'

    DECLARE @sbRequestBody int
    EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbRequestBody OUT

    EXEC sp_OAMethod @json, 'EmitSb', @success OUT, @sbRequestBody
    DECLARE @sbResponseBody int
    EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbResponseBody OUT

    EXEC sp_OAMethod @rest, 'FullRequestSb', @success OUT, 'POST', '/', @sbRequestBody, @sbResponseBody
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @rest, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @rest
        EXEC @hr = sp_OADestroy @authAws
        EXEC @hr = sp_OADestroy @json
        EXEC @hr = sp_OADestroy @sbRequestBody
        EXEC @hr = sp_OADestroy @sbResponseBody
        RETURN
      END
    DECLARE @respStatusCode int
    EXEC sp_OAGetProperty @rest, 'ResponseStatusCode', @respStatusCode OUT

    PRINT 'response status code = ' + @respStatusCode
    IF @respStatusCode >= 400
      BEGIN

        PRINT 'Response Status Code = ' + @respStatusCode

        PRINT 'Response Header:'
        EXEC sp_OAGetProperty @rest, 'ResponseHeader', @sTmp0 OUT
        PRINT @sTmp0

        PRINT 'Response Body:'
        EXEC sp_OAMethod @sbResponseBody, 'GetAsString', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @rest
        EXEC @hr = sp_OADestroy @authAws
        EXEC @hr = sp_OADestroy @json
        EXEC @hr = sp_OADestroy @sbRequestBody
        EXEC @hr = sp_OADestroy @sbResponseBody
        RETURN
      END

    DECLARE @jsonResponse int
    EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @jsonResponse OUT

    EXEC sp_OAMethod @jsonResponse, 'LoadSb', @success OUT, @sbResponseBody

    EXEC sp_OASetProperty @jsonResponse, 'EmitCompact', 0
    EXEC sp_OAMethod @jsonResponse, 'Emit', @sTmp0 OUT
    PRINT @sTmp0

    -- Sample JSON response:
    -- (Sample code for parsing the JSON response is shown below)

    -- {
    --   "Attributes": {
    --     "LastPostedBy": {
    --       "S": "alice@example.com"
    --     },
    --     "ForumName": {
    --       "S": "Amazon DynamoDB"
    --     },
    --     "LastPostDateTime": {
    --       "S": "20130320010350"
    --     },
    --     "Tags": {
    --       "SS": [
    --         "Update",
    --         "Multiple Items",
    --         "HelpMe"
    --       ]
    --     },
    --     "Subject": {
    --       "S": "Maximum number of items?"
    --     },
    --     "Views": {
    --       "N": "5"
    --     },
    --     "Message": {
    --       "S": "I want to put 10 million data items to an Amazon DynamoDB table.  Is there an upper limit?"
    --     }
    --   }
    -- }

    -- Sample code for parsing the JSON response...
    -- Use the following online tool to generate parsing code from sample JSON:
    -- Generate Parsing Code from JSON

    DECLARE @strVal nvarchar(4000)

    DECLARE @AttributesLastPostedByS nvarchar(4000)
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @AttributesLastPostedByS OUT, 'Attributes.LastPostedBy.S'
    DECLARE @AttributesForumNameS nvarchar(4000)
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @AttributesForumNameS OUT, 'Attributes.ForumName.S'
    DECLARE @AttributesLastPostDateTimeS nvarchar(4000)
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @AttributesLastPostDateTimeS OUT, 'Attributes.LastPostDateTime.S'
    DECLARE @AttributesSubjectS nvarchar(4000)
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @AttributesSubjectS OUT, 'Attributes.Subject.S'
    DECLARE @AttributesViewsN nvarchar(4000)
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @AttributesViewsN OUT, 'Attributes.Views.N'
    DECLARE @AttributesMessageS nvarchar(4000)
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @AttributesMessageS OUT, 'Attributes.Message.S'
    DECLARE @i int
    SELECT @i = 0
    DECLARE @count_i int
    EXEC sp_OAMethod @jsonResponse, 'SizeOfArray', @count_i OUT, 'Attributes.Tags.SS'
    WHILE @i < @count_i
      BEGIN
        EXEC sp_OASetProperty @jsonResponse, 'I', @i
        EXEC sp_OAMethod @jsonResponse, 'StringOf', @strVal OUT, 'Attributes.Tags.SS[i]'
        SELECT @i = @i + 1
      END

    EXEC @hr = sp_OADestroy @rest
    EXEC @hr = sp_OADestroy @authAws
    EXEC @hr = sp_OADestroy @json
    EXEC @hr = sp_OADestroy @sbRequestBody
    EXEC @hr = sp_OADestroy @sbResponseBody
    EXEC @hr = sp_OADestroy @jsonResponse


END
GO