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
    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