SELECT 语句可以使用包含字段名称的变量吗?

时间:2021-05-06 03:01:01

标签: sql-server tsql variables dynamic dynamicquery

我将 SQL Server 2008R2 与 SSMS17 一起使用,并尝试根据当前数据自动生成一些“最少使用的字段”报告。理想情况下,我想将这些字段的列表检索到一个表变量中,然后创建一个 SELECT 语句,在其中我只提取记录 ID 以及这些最少使用字段的值,但这些变量解析为文本而不是字段名称。我正在尝试的可能吗?

这是一个使用已知字段名称的简化示例:

    DECLARE @f1 as nvarchar(20) = 'MySpaceID';
    DECLARE @f2 as nvarchar(20) = 'FaxNum';
    DECLARE @f3 as nvarchar(20) = 'PagerNum';
    
    SELECT [ID], [FullName], @f1 as Field1, @f2 as Field2, @f3 as Field3
    FROM tblContacts
    WHERE @f1 is not null
       OR @f2 is not null
       OR @f3 is not null;

我得到的是作为输出的变量值。

    f1          f2      f3
    ----------  ------  ---------
    MySpaceID   FaxNum  PagerNum
    MySpaceID   FaxNum  PagerNum
    MySpaceID   FaxNum  PagerNum

这可行吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

EXEC('SELECT [ID], [FullName], ' + @f1 + ' as Field1, ' + @f2 + ' as Field2,' + @f3 + ' as Field3
      FROM tblContacts
      WHERE ' +  @f1 + ' IS NOT NULL
         OR ' +  @f2 + ' IS NOT NULL
         OR ' +  @f3 + ' IS NOT NULL')
相关问题