检查union sql server中是否存在数据库

时间:2011-06-02 11:14:34

标签: sql sql-server-2008

我想从多个数据库联合查询。但在联盟之前我想检查数据库是否退出然后联合,如果第二个数据库退出然后联合等等......

IF EXISTS(SELECT * FROM sys.sysdatabases where name='FirstDB')
select * from FirstDB.dbo.tablename
union
IF EXISTS(SELECT * FROM sys.sysdatabases where name='SecondDB')
select * from SecondDB.dbo.tablename.

如何做到这一点。 提前谢谢。

3 个答案:

答案 0 :(得分:3)

如果数据库丢失(不太明白),批处理将无法编译,因此代码将无法运行。这意味着对数据库存在的任何测试都将失败。

假设您确实有数据库随机出现和消失,唯一的“实用”选项是动态SQL

...
IF DB_ID('FirstDB') IS NOT NULL
   SET @sql ='select * from FirstDB.dbo.tablename'

IF DB_ID('SecondDB') IS NOT NULL
   SET @sql =  @sql + CASE WHEN @sql = '' THEN '' ELSE 'union ' END +
                      'select * from SecondDB.dbo.tablename'
...

答案 1 :(得分:2)

在运行时选择数据库或表是代码味道。它可能在你的情况下有效,但它肯定是可疑的。如果您对正在使用的数据库有任何控制权,请考虑重新评估数据库设计。是否在运行时创建和销毁数据库?这几乎肯定是一个坏主意。

答案 2 :(得分:0)

在每个服务器中定义一个具有固定名称的视图: 在FirstDB服务器中:

CREATE DATABASE SOME_DATABASE;
CREATE VIEW SOME_DATABASE.FIXED_TABLENAME AS SELECT * FROM FirstDB.dbo.tablename

在SecondDB服务器中:

CREATE DATABASE SOME_DATABASE;
CREATE VIEW SOME_DATABASE.FIXED_TABLENAME AS SELECT * FROM SecondDB.dbo.tablename

在DB中的代码中:

SELECT * FROM SOME_DATABASE.FIXED_TABLENAME;