我正在使用SQL Server 2008。
有没有办法从多个数据库中进行选择,查询的列可能存在也可能不存在?
我目前的代码如下:
SELECT Value FROM [database1].[dbo].[table_name] WHERE Name='job_name' AND EXISTS (SELECT 1 FROM [database1].INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='table_name')
UNION
SELECT Value FROM [database2].[dbo].[table_name] WHERE Name='job_name' AND EXISTS (SELECT 1 FROM [database2].INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='table_name')
为了澄清,我试图从两个不同的数据库进行查询。两个数据库应该具有相同的模式,但可能尚未完全初始化,因此可能不包含要查询的表。我试图在一个查询中执行此操作。
答案 0 :(得分:2)
查询中使用的名称必须在SQL优化程序尝试计划查询执行时存在。如果他们不这样做,您将收到有关相关表或列不存在的粗鲁消息。没有任何标准的方法。并且极不可能存在非标准的方法。
至少,没有办法解决查询文本的问题。如果您准备执行系统目录查询(通过本机系统目录表或通过或多或少标准化的信息模式),那么您可以决定如何在运行时构建查询,以便它具有成功的最大机会。这是一个不寻常的要求;很少有程序可以容忍这些与它们所连接的数据库的预期规范的偏差。