我正在寻找一种基于表名列表连接一系列SQL表的方法。表名的列表可以随着系统的增长而变化,但我需要确保连接在所有表增长时都能运行。
列表中的每个表都有一个名为ActivityID的公共列,它是活动表的外键,活动表是连接的源表。
我曾考虑过在执行之前创建一个varchar并构建查询。这是最好的方法吗?或者可以在不构建varchar的情况下创建连接语法吗?
发布于 2009-10-19 09:56:29
我会将查询放在一个视图中。添加新表时,请更改视图以包括新表。这将比动态sql高效得多。
如果您不控制谁/何时添加表,则类似于以下动态SQL的内容将在Sql Server中工作:
declare @query nvarchar(max)
set @query = 'select * from t1 '
select
@query = @query + 'left join ' + name +
' on t1.ActivityID = ' + name + '.ActivityID '
from sys.tables
where name like '%Activity%'
exec (@query)
再说一次,我想知道调用程序是如何知道需要哪些字段的。
发布于 2009-10-19 09:43:01
标准SQL不能做到这一点。无论如何,这通常是一个糟糕的设计。某些供应商有允许这样做的扩展,比如甲骨文在匿名PL/SQL块中有EXECUTE IMMEDIATE
。
您需要在外部构建语句,或者使用类似于存储过程的方法来构建语句并执行它。
https://stackoverflow.com/questions/1587767
复制相似问题