一尘不染

根据另一个表中的列名从一个表中选择列

sql

我有2个表,一个包含我需要的最终结果,另一个包含我需要根据设定级别选择的列列表。

例如 :

table_levels

level | name      | [selected-columns]
1     | startdate | start_date
1     | end date  | end_date
1     | contract  | contract

所以,如果我做以下

select column from table_levels where level = '1'

然后,基本上我需要使用此select语句中的列名来确定从另一条语句中选择了哪些列。

香港专业教育学院尝试过的方法,我当然知道这是错的,但可以让我对我试图做的事情有所了解。

select (select [selected-columns] from table_levels where nwlevel = '1')
from table_results

我试图以一种动态方式构建一个sql查询,该查询可以通过我放在table_levels表中的任何列进行更改。

从理论上讲,这应与以下sql查询的行为相同

select start_date, end_date, contract
from table_results

阅读 230

收藏
2021-03-10

共1个答案

一尘不染

通过略微更改@lobo的内容,我可以使其正常工作。

DECLARE @listStr varchar(MAX);
set @liststr =
        (
select [column] + ',' from dbo.columns where nwlevel = '1' for xml path('')
        )

DECLARE @query varchar(MAX);
set @query =
        (
        'SELECT ' + LEFT(@listStr, LEN(@listStr)-1) + ' FROM staff'
        )
execute(@query)
2021-03-10