Sample code for 30+ languages & platforms
SQL Server

DynamoDB - Query

See more Amazon DynamoDB Examples

The Query operation finds items based on primary key values. You can query any table or secondary index that has a composite primary key (a partition key and a sort key).

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.Query" \
    --   -d '{
    --     "TableName": "Reply",
    --     "IndexName": "PostedBy-Index",
    --     "Limit": 3,
    --     "ConsistentRead": true,
    --     "ProjectionExpression": "Id, PostedBy, ReplyDateTime",
    --     "KeyConditionExpression": "Id = :v1 AND PostedBy BETWEEN :v2a AND :v2b",
    --     "ExpressionAttributeValues": {
    --         ":v1": {"S": "Amazon DynamoDB#DynamoDB Thread 1"},
    --         ":v2a": {"S": "User A"},
    --         ":v2b": {"S": "User C"}
    --     },
    --     "ReturnConsumedCapacity": "TOTAL"
    -- }'

    -- 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": "Reply",
    --   "IndexName": "PostedBy-Index",
    --   "Limit": 3,
    --   "ConsistentRead": true,
    --   "ProjectionExpression": "Id, PostedBy, ReplyDateTime",
    --   "KeyConditionExpression": "Id = :v1 AND PostedBy BETWEEN :v2a AND :v2b",
    --   "ExpressionAttributeValues": {
    --     ":v1": {
    --       "S": "Amazon DynamoDB#DynamoDB Thread 1"
    --     },
    --     ":v2a": {
    --       "S": "User A"
    --     },
    --     ":v2b": {
    --       "S": "User C"
    --     }
    --   },
    --   "ReturnConsumedCapacity": "TOTAL"
    -- }

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

    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'TableName', 'Reply'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'IndexName', 'PostedBy-Index'
    EXEC sp_OAMethod @json, 'UpdateInt', @success OUT, 'Limit', 3
    EXEC sp_OAMethod @json, 'UpdateBool', @success OUT, 'ConsistentRead', 1
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'ProjectionExpression', 'Id, PostedBy, ReplyDateTime'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'KeyConditionExpression', 'Id = :v1 AND PostedBy BETWEEN :v2a AND :v2b'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'ExpressionAttributeValues.:v1.S', 'Amazon DynamoDB#DynamoDB Thread 1'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'ExpressionAttributeValues.:v2a.S', 'User A'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'ExpressionAttributeValues.:v2b.S', 'User C'
    EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'ReturnConsumedCapacity', 'TOTAL'

    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.Query'
    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)

    -- {
    --   "ConsumedCapacity": {
    --     "CapacityUnits": 1,
    --     "TableName": "Reply"
    --   },
    --   "Count": 2,
    --   "Items": [
    --     {
    --       "ReplyDateTime": {
    --         "S": "2015-02-18T20:27:36.165Z"
    --       },
    --       "PostedBy": {
    --         "S": "User A"
    --       },
    --       "Id": {
    --         "S": "Amazon DynamoDB#DynamoDB Thread 1"
    --       }
    --     },
    --     {
    --       "ReplyDateTime": {
    --         "S": "2015-02-25T20:27:36.165Z"
    --       },
    --       "PostedBy": {
    --         "S": "User B"
    --       },
    --       "Id": {
    --         "S": "Amazon DynamoDB#DynamoDB Thread 1"
    --       }
    --     }
    --   ],
    --   "ScannedCount": 2
    -- }

    -- 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 @ReplyDateTimeS nvarchar(4000)

    DECLARE @PostedByS nvarchar(4000)

    DECLARE @IdS nvarchar(4000)

    DECLARE @ConsumedCapacityCapacityUnits int
    EXEC sp_OAMethod @jsonResponse, 'IntOf', @ConsumedCapacityCapacityUnits OUT, 'ConsumedCapacity.CapacityUnits'
    DECLARE @ConsumedCapacityTableName nvarchar(4000)
    EXEC sp_OAMethod @jsonResponse, 'StringOf', @ConsumedCapacityTableName OUT, 'ConsumedCapacity.TableName'
    DECLARE @Count int
    EXEC sp_OAMethod @jsonResponse, 'IntOf', @Count OUT, 'Count'
    DECLARE @ScannedCount int
    EXEC sp_OAMethod @jsonResponse, 'IntOf', @ScannedCount OUT, 'ScannedCount'
    DECLARE @i int
    SELECT @i = 0
    DECLARE @count_i int
    EXEC sp_OAMethod @jsonResponse, 'SizeOfArray', @count_i OUT, 'Items'
    WHILE @i < @count_i
      BEGIN
        EXEC sp_OASetProperty @jsonResponse, 'I', @i
        EXEC sp_OAMethod @jsonResponse, 'StringOf', @ReplyDateTimeS OUT, 'Items[i].ReplyDateTime.S'
        EXEC sp_OAMethod @jsonResponse, 'StringOf', @PostedByS OUT, 'Items[i].PostedBy.S'
        EXEC sp_OAMethod @jsonResponse, 'StringOf', @IdS OUT, 'Items[i].Id.S'
        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