从存储过程处理表格多维数据集
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 代理作业以指向新服务器。
【讨论】:
以上是关于从存储过程处理表格多维数据集的主要内容,如果未能解决你的问题,请参考以下文章