在WHILE循环SQL中使用变量更改列名

时间:2013-11-20 08:11:41

标签: sql-server tsql while-loop

说我整年都有列PlanSalesMt1,PlanSalesMt2等,直到表中的Mt12。

在我创建一个视图之前,我将所有月份联合起来但这个查询非常慢。现在我想尝试使用循环查询。

我的问题是我无法在列名中使用该变量,因为它们无效。这是解决这个问题的方法吗?

我的意思是我想循环我的问题12次并在月份之后更改列的名称。但我不能创建一个@i变量并说选择PlanSalesMt @ 1或PlanSalesMt + @ 1或PlanSalesMt + CAST(@ 1作为varchar),因为它表示无效的列名称。

1 个答案:

答案 0 :(得分:0)

以下是动态SQL的示例

 DECLARE @ColumnName1 VarChar(20)
 DECLARE @ColumnName2 VarChar(20)
 DECLARE @sql Varchar(1000)
 DECLARE @MyWhere VarChar(20)
 SET @ColumnName1 =   'PlanSalesMt1'
 SET @ColumnName2 =   'PlanSalesMt2'
 SET @MyWhere =   'Books'

 SET @sql = 'SELECT ' + @ColumnName1 + ', ' + @ColumnName2 + ' FROM TABLE WHERE ' + @ColumnName1 + ' = ''' + @MyWhere + ''''

 EXEC(@sql)

如果您将EXEC(@sql)更改为SELECT @sql复制到SSMS并运行它,您将看到它产生的查询。