在尝试删除之前测试是否存在集合

时间:2013-08-22 08:37:45

标签: ssas mdx

在删除表之前SQL我会先检查它是否存在,以免引起错误,如下所示:

IF OBJECT_ID('TEMPDB..#table') IS NOT NULL 
  BEGIN 
      DROP TABLE #table 
  END

MDX我可以尝试检查setmember是否已经存在,然后再尝试删除它。

目前,我的一些.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]

1 个答案:

答案 0 :(得分:1)

我可以给你一个部分答案:你可以在schema rowsets中找到有关多维数据集对象的信息,这些信息类似于关系数据库中的INFORMATION_SCHEMA视图。从SQL Server 2008开始,您可以使用有限的SQL子集访问这些(没有连接,只是where子句中的简单column_name = 'value'条件,...),如下所示:

select * 
  from $SYSTEM.MDSCHEMA_SETS
 where SET_NAME = 'xSet'
   and CUBE_NAME = 'XCube'

Analysis Services会自动检测查询是SQL还是MDX(或者来自SQL2012,DAX)。

如果该集合存在,则会返回一条记录,如果不存在则返回none。但我不知道MDX中的一种机制是根据结果有条件地执行代码。