我必须在SSRS报表中使用Azure Cosmos DB。我使用了ODBC连接器。我能够使用简单的选择查询来获取数据。但是无法在SSRS报告中调用存储过程或函数。是否可以像SSRS那样调用Cosmos DB存储过程?
答案 0 :(得分:1)
Cosmos DB不是关系数据库,其过程用Javascript编写是与问题无关的事实。
有几种方法可以通过SQL Server中的存储过程直接和间接查询Cosmos中的数据,而该存储过程又可以用作SSRS报告的数据源。
1)编写一个Python脚本,该脚本连接到Cosmos DB,将您要查找的数据查询到JSON文档中,并将其写入文件https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-python-samples中。
如果Cosmos中的此查询需要扫描多个分区中的文档,则可以启用跨分区查询。 “要跨分区运行查询,请将EnableCrossPartitionQuery设置为true(或REST API中的x-ms-documentdb-query-enablecrosspartition)。 https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-query-container
2)在SQL Server中创建一个存储过程。在SQL Server存储过程中使用xp_cmdshell来执行步骤1中的Python脚本。或者,您可以在SQL Server中通过powershell步骤创建代理作业-存储过程可以执行此作业。
在该过程中使用BULK INSERT将文件中的JSON数据插入SQL Server的表中,然后使用T-SQL OPENJSON函数将JSON解析为列形式。
https://docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver15
3)将存储过程添加为SSRS报告的数据源。
如果您使用的是MongoAPI,还可以使用SQL Server 2019中的Polybase直接查询Cosmos。
答案 1 :(得分:0)
Cosmos DB不是关系数据库,并且它的存储过程与SQL Server存储过程不同(并且Cosmos DB存储过程中没有SQL;仅JavaScript,针对特定分区中的文档执行)。
您不能从SSRS调用Cosmos DB存储过程。您只能通过SDK(或REST API)调用来调用Cosmos DB存储的proc。
答案 2 :(得分:0)
https://docs.microsoft.com/en-us/azure/cosmos-db/odbc-driver#connect
Select * FROM OPENQUERY( select * from [CosmosDB].[Table] )
https://www.sqlshack.com/link-an-azure-cosmos-db-into-a-sql-server-stored-procedure/