SQL中的映射列名称

时间:2018-06-20 15:49:18

标签: sql-server sql-server-2008

我有一个输入表

Header    DisplayName
Field1      EmpName
Field2      EmpID
Field3      IsActive
Filed4      Dept

还有一个输出表:

Field1  Field2  Field3  Filed4
 A        1       +       Q
 B        2       +       R

如何在不显式指定“选择字段1 AS'EmpName',字段2 AS'EmpID'”等的情况下将输入表中的显示名称映射到输出表?

是否有一种通过每个字段从输入表中选择显示名称的方式映射输出表的好方法?

TIA

1 个答案:

答案 0 :(得分:2)

不确定您的情况,但是我首先会尝试使用输出表的视图进行处理。但是,如果现在可以,则可以使用动态SQL:

DECLARE @Sql NVARCHAR(MAX) = 'SELECT '
    + STUFF((
        SELECT ', [' + Header + '] AS [' + DisplayName + ']' AS [text()]
        FROM tblInput FOR XML PATH('')), 1, 2, '')
    + ' FROM tblOutput'
EXEC sys.sp_executesql @Sql

如果需要,它将支持注入SQL的变量。

DECLARE @Sql NVARCHAR(MAX) = 'SELECT '
    + STUFF((
        SELECT ', [' + Header + '] AS [' + DisplayName + ']' AS [text()]
        FROM tblInput FOR XML PATH('')), 1, 2, '')
    + ' FROM tblOutput O WHERE Field1 = @Field1'
EXEC sys.sp_executesql @Sql, N'@Field1 VARCHAR(50)', @Field1 = 'A'