我正在寻找一种基于表名列表加入一系列SQL表的方法。表名列表可以随着系统的增长而改变,但我需要确保连接在所有表的增长时都能运行。
列表中的每个表都有一个名为ActivityID的公共列,它是一个返回Activity表的外键,它是连接的源表。
我想过可能会在执行之前创建一个varchar并构建查询。这是最好的方法还是可以在没有varchar构建的情况下创建连接语法?
答案 0 :(得分:1)
标准SQL无法执行此操作。无论如何,它通常是一个糟糕的设计。某些供应商具有允许这样的扩展,例如Oracle在匿名PL / SQL块中具有EXECUTE IMMEDIATE
。
您需要在外部构建语句或使用类似存储过程的内容来构建语句并执行它。
答案 1 :(得分:1)
我将查询放在视图中。添加新表时,请更改视图以包含新表。这比动态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)
然后,我想知道调用程序如何知道期望哪些字段。