如何使用动态 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 逻辑。
我正在为数据库创建数据验证程序,使用数据库中的各种模型等。
我创建了一个带有模型、序列和 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 逻辑。