从存储过程处理表格多维数据集

Posted

技术标签:

【中文标题】从存储过程处理表格多维数据集【英文标题】:Process Tabular cube from stored procedure 【发布时间】:2020-11-17 04:23:34 【问题描述】:

我有一个存储过程,它在一个 db 中填充几个表,这是一个表格 SSAS 多维数据集的数据源。当我完成加载表时,我想将多维数据集作为存储过程中的最后一步进行处理。我找到了这段代码:

DECLARE @XMLA XML = '
  <Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
    <Process>
      <Object>
        <DatabaseID>' + @Database + '</DatabaseID>
      </Object>
      <Type>ProcessFull</Type>
      <WriteBackTableCreation>UseExisting</WriteBackTableCreation>
    </Process>
  </Batch>
';

DECLARE @Command VARCHAR(MAX) = CONVERT(VARCHAR(MAX), @XMLA);
EXEC (@Command) AT SSAS;

它接受数据库名称,但我不知道如何让它在特定服务器或 SSAS 实例上运行。我的存储过程和多维数据集位于 Sql 服务器的不同命名实例上。有谁知道如何在 xmla 中嵌入服务器/实例名称或在指定实例上运行 xmla?

提前致谢。

【问题讨论】:

我会创建一个 sql 代理作业,然后从存储的过程中运行该作业。 BTW TMSL 是表格立方体的前进方向 【参考方案1】:

我发现密钥正在使用链接服务器(以及 TMSL,感谢 Mitch Wheat):

DECLARE @TMSL VARCHAR(MAX) = '
  "refresh": 
    "type": "full",
    "objects": [
      
        "database": ' + @DataBaseName + '
      
    ]
  
';
 

EXEC (@TMSL) AT SSASTABULAR; -- linked server name

SSSTABULAR 是一个链接服务器,指向我的 ssas 多维数据集服务器实例。

【讨论】:

而不是使用链接服务器,我认为更简洁的方法是创建一个代理作业,然后从 SP 运行该作业【参考方案2】:

您可以在 SQL 代理中创建一个作业来处理多维数据集。然后,您可以使用 sp_start_job 从存储过程中调用 SQL 代理作业。

https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-start-job-transact-sql?view=sql-server-ver15

这样做可以让您处理来自不同存储过程的多维数据集,而无需在每个存储过程中存储处理代码。如果您的多维数据集移动到不同的服务器,它还可以更轻松地进行更新。您只需更新 SQL 代理作业以指向新服务器。

【讨论】:

以上是关于从存储过程处理表格多维数据集的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 查询多维数据集

Apache DbUtils:处理从存储过程返回的多个结果集

oracle 存储过程,数据处理并返回结果集问题

关于存储过程

存储过程 游标使用实例

在实体框架数据库优先方法中,如何从存储过程返回多个结果集?