我想从多个数据库联合查询。但在联合之前,我想检查数据库是否退出然后联合,如果第二个数据库退出然后联合,依此类推……
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.如何做到这点。提前谢谢。
发布于 2011-06-02 19:37:40
如果数据库丢失(不太理解),批处理将不会编译,因此代码将不会运行。这意味着对数据库存在的任何测试都将失败。
假设您确实有随机出现和消失的数据库,惟一的“实用”选项是动态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'
...发布于 2011-06-02 19:24:38
在运行时选择数据库或表是代码嗅觉。它在你的情况下可能是有效的,但它肯定是可疑的。如果您可以控制正在使用的数据库,请考虑重新评估您的数据库设计。数据库是否在运行时创建和销毁?这几乎可以肯定是一个坏主意。
发布于 2011-06-02 19:30:14
在每个服务器中定义一个具有固定名称的视图:在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;https://stackoverflow.com/questions/6213786
复制相似问题