Azure cosmosdb 在Cosmos DB中将关键字用作别名

Azure cosmosdb 在Cosmos DB中将关键字用作别名,azure-cosmosdb,alias,keyword,reserved-words,Azure Cosmosdb,Alias,Keyword,Reserved Words,我想在SELECT子句中将关键字order用作表达式的别名 要复制,请将以下内容插入Cosmos DB集合 { "name": "John Doe" } 以下查询工作正常 SELECT c.name , c["order"] , c["order"] ?? "defaultValue" , c["order"] ?? "defaultValue" as order2 FROM c WHERE c.name = 'John Doe' 这个失败是因为我使

我想在SELECT子句中将关键字order用作表达式的别名

要复制,请将以下内容插入Cosmos DB集合

{
    "name": "John Doe"
}
以下查询工作正常

SELECT 
    c.name 
  , c["order"]    
  , c["order"] ?? "defaultValue" 
  , c["order"] ?? "defaultValue" as order2
FROM c
WHERE c.name = 'John Doe'
这个失败是因为我使用了关键字order

SELECT 
    c.name 
  , c["order"]    
  , c["order"] ?? "defaultValue" 
  , c["order"] ?? "defaultValue" as order2
  , c["order"] ?? "defaultValue" as order
FROM c
WHERE c.name = 'John Doe'

我尝试过使用方括号、双引号和单引号来包围别名,就像SQL Server允许的那样

据我所知,cosmos db只支持查询使用保留字的字段名

SELECT c["top"] FROM c

恐怕您不能在alias上使用保留字,因为它不能正确标识为平滑SQL语句。此外,我还认为这种方法会导致歧义,这在SQL中是极不推荐的。

有点难看,但这种语法适用于Cosmos:

SELECT VALUE {'order':c["order"]} FROM c WHERE c.name='John Doe'
与常规SQL大致相当:

SELECT c.[order] as [order] FROM c WHERE c.name='John Doe'

您正在尝试创建一个已为保留字的别名。我怀疑这是可能的。即使有可能,这似乎是一种反模式,将保留字重新映射为不同的意思。嗨,我的答案对你有帮助吗?为什么我不能使用方括号?你是说我永远不能用关键字作为属性名吗?如果是这样,最好在某处出现警告。如果这是已存在数据的属性名称,您会怎么做?