我想根据另一个表中的某些元数据返回列。即我有一个包含10列的表,另一个表包含那些带有元数据的列的非规范化。
即。 表 - 汽车:
列 - 制作,模型,颜色
和另一个名为“Flags”的表,其中每个上面的列都有一行,每行都有一个“IsSearchable”和“ShowOnGrid”的列 - 这样的东西。 我想要的查询将返回cars表中标记为“标志”表中的所有列为“ShowInGrid”
---- EDIT
道歉,我应该说这是在SQL Server 2008上。 此外,我不想要物理地说明我想要返回的列,即如果我向汽车表添加一列,然后将其添加到Flags表并声明它是可搜索的,我不想必须在SQL查询中物理状态,我想要返回该列,我希望它自动通过。
答案 0 :(得分:0)
您需要使用动态SQL;这可以通过存储过程轻松完成。
答案 1 :(得分:0)
这样的事可能有用:
Select
D.CarID,
Case D.ShowMake When True Then D.Make Else NULL END AS Make
...
From
(Select
C.CarID, C.Make, C.Model, C.Colour, F.IsSearchable, F.ShowOnGrid, F.ShowMake
From
Cars C
Inner Join
Flags F
On C.CarID = F.CarID) D
我没有写过所有的case语句,也不知道你工作了多少个标志,但你可以尝试一下。它需要过滤应用程序中的空值。如果您确实希望在Flag列值的基础上省略列,则其他答案和注释都正确。无论是动态SQL还是首先使用其他语言在外部构建查询。