Ssas 在尝试删除某个集合之前,测试该集合是否存在
在Ssas 在尝试删除某个集合之前,测试该集合是否存在,ssas,mdx,Ssas,Mdx,在SQL中,在删除表之前,我将首先检查它是否存在,以免引起错误,如下所示: IF OBJECT_ID('TEMPDB..#table') IS NOT NULL BEGIN DROP TABLE #table END 在MDX中,我可以先检查set或member是否已经存在,然后再尝试删除它 目前,我在一些.mdx文件中具有以下结构。我向多维数据集中添加一个自定义集,然后在随后的几个脚本中使用该集,即它们是多批脚本 /* //I run the following m
SQL
中,在删除表之前,我将首先检查它是否存在,以免引起错误,如下所示:
IF OBJECT_ID('TEMPDB..#table') IS NOT NULL
BEGIN
DROP TABLE #table
END
在MDX
中,我可以先检查set
或member
是否已经存在,然后再尝试删除它
目前,我在一些.mdx
文件中具有以下结构。我向多维数据集中添加一个自定义集,然后在随后的几个脚本中使用该集,即它们是多批脚本
/*
//I run the following manually...
DROP SET [XCube].[xSet]
*/
CREATE
SET [XCube].[xSet] AS
blah blah
1.
SELECT x FROM XCube USING variousconditions AND xSet
GO
2.
SELECT y FROM XCube USING variousconditions AND ySet
GO
3.
SELECT y FROM XCube USING variousconditions AND ySet
GO
把上述背景放在一边,我的问题很简单:
如何测试
xSet
是否存在,以便只有在需要时才能执行DROP SET[XCube].[xSet]
?我可以给您一个部分答案:您可以在中找到有关多维数据集对象的信息,这些信息类似于关系数据库中的信息模式
视图。从SQL Server 2008开始,您可以使用有限的SQL子集(没有联接,只是where子句中的简单column\u name='value'
条件,…)访问它们,如下所示:
select *
from $SYSTEM.MDSCHEMA_SETS
where SET_NAME = 'xSet'
and CUBE_NAME = 'XCube'
Analysis Services会自动检测查询是SQL还是MDX(或者,从SQL2012开始,是DAX)
如果集合存在,这将返回一条记录,如果集合不存在,则返回一条记录。但我不知道MDX中有一种机制可以根据结果有条件地执行代码。您希望在什么上下文中执行此操作?冗长的批处理脚本在SSA中并不常见。可以1)在计算脚本中创建集合,2)在用户会话中创建集合,3)在查询的
WITH
子句中创建集合。至少对于1和3来说,你知道整个环境,对于2来说,你也在控制你所做的事情。我看到的唯一原因是避免2和3与1和2中已经存在的集合发生名称冲突。但在大多数情况下,选择合理的名称应该避免这种情况,特别是在实践中,每个立方体只有几个集合。@FrankPl好的-让我编辑OP,让您了解上下文,尽管我的问题非常简单-“如何在不抛出错误的情况下测试自定义集合的存在?”这很有趣,缺乏条件可能性令人惊讶,值得提出一个新问题