动态地根据记录集中的值连接表

时间:2012-06-08 09:27:21

标签: sql sql-server sql-server-2008 stored-procedures

问题可能并不完全描述我想要做的事情,但我有一个存储过程,其中有一个查询返回以下列

ID标题表名

标题当前返回为NULL,因为我需要能够从Tablename列中引用的JOINED表中获取它。在查询中可能会返回几个不同的Tablename值,并且每个记录的标题需要从每个记录的Tablename字段中引用的表中获取。

是否有纯SQL方法?

我已经考虑过创建一个临时表,然后循环遍历每个记录并通过对Tablename中的表运行单独的查询来设置Title,但是我想跳过更清晰的解决方案。

谢谢

1 个答案:

答案 0 :(得分:2)

这可能表明设计不直接适合SQL。您的标题信息存储在多个表中的原因是什么?是不是可以重新计算?

但是,如果表的列表是固定列表,则有一个解决方案;在视图中使用UNION ALL,或者在CTE中使用内嵌视图,以使您的许多表看起来像一个表...

WITH
  inlineView
AS
(
              SELECT 'table1' AS tableName, x, y, z, title FROM table1
  UNION ALL   SELECT 'table2' AS tableName, x, y, z, title FROM table2
  UNION ALL   SELECT 'table3' AS tableName, x, y, z, title FROM table3
)
SELECT
  *
FROM
  aTable
INNER JOIN
  inlineView
    ON  aTable.tableName = inlineView.tableName
    AND aTable.x         = inlineView.x

如果你不能使它适合,或者你需要在视图中包含的表的数量没有修复,你可能需要一个循环和一些动态SQL。同样,这是一个强有力的指标,表明架构并不真正适合SQL。