Sql server 如何使用动态sql将table.column值用于联接?

Sql server 如何使用动态sql将table.column值用于联接?,sql-server,dynamic-sql,Sql Server,Dynamic Sql,我正在使用数据库中的各种模型等为数据库创建数据验证过程 我创建了一个带有模型、序列和3列的临时表。 在每一列中,我都有要在查询中使用的限定列名table.column,或者一个空值。以下是临时表格结构: create table #temp_table(model nvarchar(50), seq nvarchar(50), col nvarchar(100), col2 nvarchar(100) , col3 nvarchar(100)) 在我的动态sql中,我有一个连接,类似于这样的

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

我创建了一个带有模型、序列和3列的临时表。 在每一列中,我都有要在查询中使用的限定列名table.column,或者一个空值。以下是临时表格结构:

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
我正在做的有更多的表,因此。。。在查询的中间,我们假设所有的表都是有效的,所有的列都是有效的。 因为temp_table.col存储一个值,所以当连接到set_model.val时,比较看起来像“Buildings.year_id”=2014

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

例如:

如果在上面的查询中temp_table.col='Buildings.year\u id' 如何使连接评估Buildings.year\u id=set\u model.val
而不是'Buildings.year\u id'=2014?

我尝试创建一个查询,该查询基于查询的行具有不同的查询计划。 我找到了一个解决方法,创建一个游标,在n个不同的表中循环,并在每个动态查询后面附加一个“union”,但我回来后思考了一会儿遇到的问题

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

如果查询能够工作,那么效率将非常低,因为每一行都会生成自己的“select”语句


不管怎样,这个问题本身是基于错误/不完整的逻辑。

如果您已经在使用动态SQL,为什么在构建字符串时需要表名周围的字符?mSQL=SELECT*From+table.column+,其中X=Y,然后执行mSQL这是因为table.column值根据模型而变化,而模型根据行而变化。使用动态SQL,您正在构建一个字符串,然后执行该字符串。在上面的例子中,查询的字符串结果被构建到字符串中,然后执行。这样做的缺点是没有预编译,因此执行时间会更长。如果未正确清理table.column name数据,也可能发生SQL注入。但在概念上,这是可行的。下面是一个例子: