在删除表之前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]
?
答案 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中的一种机制是根据结果有条件地执行代码。