如何使用动态 sql 的连接使用 table.column 值?

How can I use a table.column value for a join using dynamic sql?

我正在为数据库创建数据验证程序,使用数据库中的各种模型等。

我创建了一个带有模型、序列和 3 列的临时文件 table。 在这些列的每一列中,我都有要在我的查询中使用的限定列名称 (table.column) 或空值。这是 temp_table 结构:

create table #temp_table(model nvarchar(50), seq nvarchar(50), col nvarchar(100), col2 nvarchar(100) , col3  nvarchar(100))

在我的动态 sql 中,我有一个类似这样的连接(非常简化):

select *
from 
      original_table
inner join
...
      #temp_table
on
      original_table.models = #temp_table.models
inner join
      set_model
on    
      original_tables.models = set_model.models
and   #temp_table.col = set_model.val
and   #temp_table.col2 = set_model.val2
and   #temp_table.col3 = set_model.val3

我正在处理的内容有更多 tables(因此...在查询中间),因此,我们假设所有 tables存在并且所有列都有效。

因为 #temp_table.col 存储了一个值,当加入 set_model.val 时,比较看起来像 'Buildings.year_id' = 2014.

有没有办法强制我的动态查询使用#temp_table.col 中的值作为连接条件的一部分?

例如:

如果在上面的查询中#temp_table.col = 'Buildings.year_id'
我如何使连接评估 Buildings.year_id = set_model.val 而不是 'Buildings.year_id' = 2014?

我试图创建一个查询,该查询根据查询的行具有不同的查询计划。
我找到了一个解决方法(创建一个游标并循环遍历 n 个不同的表,并为每个动态查询附加一个“ union ”),但我回过头来想了一会儿我 运行 遇到的问题。

我意识到我正在尝试根据我正在使用的查询中的数据动态创建查询。因此,无法创建有效的查询计划,因为它需要 运行 基于 每行 .

的唯一查询

如果查询能够工作,它将极其效率低下(因为每一行都会有自己的'select'语句)。

无论如何,问题本身是基于 bad/incomplete 逻辑。