ExecuteCosmosSqlQuery Function
Executes a query against data in JSON columns
Parameters
Parameters allow for data to be passed to the function.
Name | Type | Nullable | Unicode | Description |
---|---|---|---|---|
QueryText
|
Edm.String | False | False | Cosmos sql query. |
EntityLogicalName
|
Edm.String | False | False | LogicalName of the elastic table |
QueryParameters
|
ParameterCollection | True | True | Values for any parameters that are specified in the QueryText parameter. |
PageSize
|
Edm.Int64 | True | True | Number of records returned in a single page. |
PagingCookie
|
Edm.String | True | False | Paging cookie to be used. |
PartitionId
|
Edm.String | True | False | Partitionid to set the scope of the query. |
Return type
Type | Nullable | Description |
---|---|---|
crmbaseentity | False | The ExecuteCosmosSqlQuery function returns the following value. |
Remarks
Use Structured Query Language (SQL) as a JSON query language to compose the query used in the QueryText
parameter. More information: Azure Cosmos DB / NoSQL / Getting started with queries
When your QueryText
includes named parameter references using '@', they must be included in the QueryParameters
property as a parameter collection. A ParameterCollection Complex Type is a collection of Keys
and Values
. The values are defined using Object Complex Type so that you can specify the type of parameter using .NET names, such as System.String or System.Int32.
Example
Request
GET [Organization Uri]/api/data/v9.2/ExecuteCosmosSqlQuery(QueryText=@p1,EntityLogicalName=@p2,QueryParameters=@p3,PageSize=@p4,PartitionId=@p5)?@p1='select c.props.contoso_deviceid as deviceId, c.props.contoso_timestamp as timestamp, c.props.contoso_energyconsumption.power as power from c where c.props.contoso_sensortype=@sensortype and c.props.contoso_energyconsumption.power > @power'
&@p2='contoso_sensordata'
&@p3={"Keys":["@sensortype","@power"],"Values":[{"Type":"System.String","Value":"Humidity"},{"Type":"System.Int32","Value":"5"}]}
&@p4=50
&@p5='Device-ABC-1234'
MSCRM.SessionToken: 207:8#142792107#7=-1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Response
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#expando/$entity",
"@odata.type": "#Microsoft.Dynamics.CRM.expando",
"PagingCookie": "W3sidG9rZW4iOiIrUklEOn5DVm9OQUpJaWRuTjBJajRBQUFBd0R3PT0jUlQ6MSNUUkM6NTAjSVNWOjIjSUVPOjY1NTUxI1FDRjo4I0ZQQzpBWFFpUGdBQUFEQVBveUkrQUFBQU1BOD0iLCJyYW5nZSI6eyJtaW4iOiIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIm1heCI6IjE0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIn19XQ==",
"HasMore": true,
"Result@odata.type": "#Collection(Microsoft.Dynamics.CRM.expando)",
"Result": [
{
"@odata.type": "#Microsoft.Dynamics.CRM.expando",
"deviceId": "Device-ABC-1234",
"power": 6
},
[ 49 records truncated for brevity]
]
}
The return type is a crmbaseentity, but actually it represents an expando.
This entity has the following attributes:
Name | Type | Description |
---|---|---|
PagingCookie |
String | A value to set for subsequent requests when there are more results. |
HasMore |
Bool | Whether there are more records in the results. |
Result |
String | JSON with values with the results. |
Despite returning expando
, because the return value isn't dynamic, it is a closed type. You will need to parse the response.
When you have specified a PageSize
that is less than the total number of results matching the criteria of your query, you can send additional requests with the same query by passing the PagingCookie
value in subsequent requests. For example:
Request
GET [Organization Uri]/api/data/v9.2/ExecuteCosmosSqlQuery(QueryText=@p1,EntityLogicalName=@p2,QueryParameters=@p3,PageSize=@p4,PagingCookie=@p5,PartitionId=@p6)?@p1='select c.props.contoso_deviceid as deviceId, c.props.contoso_timestamp as timestamp, c.props.contoso_energyconsumption.power as power from c where c.props.contoso_sensortype=@sensortype and c.props.contoso_energyconsumption.power > @power'
&@p2='contoso_sensordata'
&@p3={"Keys":["@sensortype","@power"],"Values":[{"Type":"System.String","Value":"Humidity"},{"Type":"System.Int32","Value":"5"}]}
&@p4=50
@p5='W3sidG9rZW4iOiIrUklEOn5DVm9OQUpJaWRuTjBJajRBQUFBd0R3PT0jUlQ6MSNUUkM6NTAjSVNWOjIjSUVPOjY1NTUxI1FDRjo4I0ZQQzpBWFFpUGdBQUFEQVBveUkrQUFBQU1BOD0iLCJyYW5nZSI6eyJtaW4iOiIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIm1heCI6IjE0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIn19XQ=='
&@p6='Device-ABC-1234'
MSCRM.SessionToken: 207:8#142792107#7=-1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
You can continue to get paged results until the HasMore
property returns false.
More information: