Azure cosmosdb 在Cosmos DB中将关键字用作别名
我想在SELECT子句中将关键字order用作表达式的别名 要复制,请将以下内容插入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' 这个失败是因为我使
{
"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'
您正在尝试创建一个已为保留字的别名。我怀疑这是可能的。即使有可能,这似乎是一种反模式,将保留字重新映射为不同的意思。嗨,我的答案对你有帮助吗?为什么我不能使用方括号?你是说我永远不能用关键字作为属性名吗?如果是这样,最好在某处出现警告。如果这是已存在数据的属性名称,您会怎么做?