从数据库中选择,其名称是从其他字段返回的值

问题描述 投票:0回答:1

我有一个奇怪的情况 - 我需要从数据库中进行选择,但其名称位于另一个表的字段中。 客户有一个 ERP,其中每个任务都在自己的数据库中,并且他们有 5 个不同的任务。它们都具有完全相同的结构。例如,我需要从更多的授权中获取产品信息。我有一张表,其中一个字段包含数据库名称和一个记录 ID,一个只是身份。所以我想做一些类似的事情

SELECT relations.id, relations.database, products.warehouse, products.image FROM relations WHERE id = xxxx
LEFT JOIN [relations.database].dbo.products

有什么办法可以做到这一点吗?

sql-server left-join
1个回答
0
投票

如果你总是只需要这5个数据库,你可以用标签标记每个数据库,就像这样

select * from 
  relations 
left join (
    select 'Database1' as database_for_extraction,* from Database1.dbo.products
    union all select 'Database2' as database_for_extraction,* from Database2.dbo.products
    union all select 'Database3' as database_for_extraction,* from Database3.dbo.products
    union all select 'Database4' as database_for_extraction,* from Database4.dbo.products
    union all select 'Database5' as database_for_extraction,* from Database5.dbo.products) products on products.database_for_extraction = relations.database

它可能会很慢,如果您先只选择需要的行会更好。 但如果数据库列表可以更改,动态 SQL 是唯一的选择。

© www.soinside.com 2019 - 2024. All rights reserved.