我在数据库中使用各种模型等为数据库创建数据验证程序。
我创建了一个包含模型,序列和3列的临时表。 在每个列中,我都有我的查询中使用的限定列名(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
我正在做的工作有更多的表(因此......在查询的中间),因此,我们只假设所有表都存在且所有列都有效
因为#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
?
答案 0 :(得分:0)
我试图根据查询的行创建一个具有不同查询计划的查询 我找到了一个解决方法(创建一个游标并循环遍历n个不同的表并使用'union'附加每个动态查询),但我回过头来思考我遇到的问题一段时间。
我意识到我正在尝试根据我正在使用的查询中的数据动态创建查询。因此,无法创建有效的查询计划,因为它需要根据每一行运行唯一查询。
如果查询能够正常工作,那么非常效率低下(因为每行都会创建自己的'select'语句)。
无论如何,问题本身都是基于错误/不完整的逻辑。