2

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

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

在尝试删除它之前,MDX我可以使用一种方法来检查 a setor是否已经存在。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]仅在需要时才能执行?

4

1 回答 1

1

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

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

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

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

于 2013-08-23T08:23:36.630 回答