SQL—从列表中传递列名的动态方式

SQL—从列表中传递列名的动态方式,sql,sql-server,sql-server-2008,tsql,dynamic,Sql,Sql Server,Sql Server 2008,Tsql,Dynamic,我有一个存储列namea的表,它看起来像这样: header Ref_1 Ref_4 Ref_6 Ref_100 select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_1** select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_4** select mycolumn1, mycolumn2 a from myt

我有一个存储列
namea
的表,它看起来像这样:

header
Ref_1
Ref_4
Ref_6
Ref_100
select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_1**
select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_4**
select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_6**
select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_100**
我想运行一个动态sql,它将使用上表中的值作为列名,列名应如下所示:

header
Ref_1
Ref_4
Ref_6
Ref_100
select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_1**
select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_4**
select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_6**
select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = **b.ref_100**
这里您看到b.ref{{}应该是动态传递的,有什么方法可以做到这一点吗

我可以使用C#脚本或SQL Server集成服务轻松完成这项工作,但我想在T#U SQL中完成这项工作

提前谢谢

declare @str varchar(max) = (
   select 'select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = b. ' + your_column_table.header
   from your_column_table
)
然后可以执行@str


如果要生成单独的sql语句,则需要循环\u column\u表并执行相同的操作

如果需要循环并运行每个列名的查询,则可以尝试以下查询:

DECLARE @q nvarchar(max)
DECLARE @ctr INT

SELECT @ctr= COUNT(1) FROM mytable1

WHILE (@ctr>0)
BEGIN

   SELECT @q= 
       'select mycolumn1, mycolumn2 a from mytable1 b inner join a.ref = b.' + 
         namea 
    FROM (
          SELECT namea, ROW_NUMBER() OVER(ORDER BY namea ASC) AS R 
          FROM mytable1 
         ) T WHERE R=@ctr

  SET @ctr=@ctr-1
  EXEC(@q)
END
下面是示例输出

您的select语句不正确?from子句中缺少表
a
。是否需要为特定列的所有列编写脚本?虽然闪烁方法可以做到这一点,但首选方法是使用sp_execute_sql。