2017-12-28 20 views
0

azure cosmos db에 대한 쿼리를 작성할 때 IN 식에서 사용할 수 있도록 배열을 SqlQuerySpec의 param으로 전달하려고합니다. 난 할 노력하고있어 뭔가 우리가 정기적으로처럼 (문자열, 등 INT) PARAMS입니다 :cosmos DB 쿼리에 대한 sql 쿼리 매개 변수로 배열을 전달하는 방법

private SqlQuerySpec BuildQuery(IEnumerable<string> exclTypes) 
{ 
    var queryText = "SELECT * FROM root r WHERE r.Type NOT IN (@types)"; 
    var parameters = new SqlParameterCollection{new SqlParameter("@types", exclTypes.ToArray())}; 
    return new SqlQuerySpec() 
    {QueryText = queryText, Parameters = parameters}; 
} 

을하지만 그와 같은 방식으로 작동하지 않습니다. 배열을 매개 변수로 전달할 수있는 다른 방법은 없나요? 감사합니다. .

답변

2

귀하의 질문은 다음과 비슷한 모습이 될 것

SELECT * FROM root r WHERE ARRAY_CONTAINS(@types, r.Type) <> true 

는 당신은 배열로 @types을 통과하고 그 배열이 문서에 당신이 재산 r.Type에있는 값이 포함되어 있는지 확인 할 수 있습니다.

심판 :

https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sql-query-reference#bk_array_contains https://github.com/Azure/azure-documentdb-node/issues/156

+0

쿨 !! 그게 효과가! 고마워요 !! –

0

이 tisto를 수행하는 가장 쉬운 방법은 테이블 반환 매개 변수를 설정하는 것입니다. 배열은 TVP로 전달 될 것이고, 이후 테이블이므로 IN 술어의 일부로 사용할 수 있습니다. 그것에 관해 많은 온라인 자료가 있습니다.

+0

감사합니다,하지만 확실하지 나는 u는 이야기 이해. 저는 코스모스 테이블 스토리지를 사용하지 않고 대신 문서 스토리지를 사용합니다. 작은 예제를 작성하거나 튜토리얼에 대한 링크를 제공하여 어디에서 찾을 수 있습니까? –