说我整年都有列PlanSalesMt1,PlanSalesMt2等,直到表中的Mt12。
在我创建一个视图之前,我将所有月份联合起来但这个查询非常慢。现在我想尝试使用循环查询。
我的问题是我无法在列名中使用该变量,因为它们无效。这是解决这个问题的方法吗?
我的意思是我想循环我的问题12次并在月份之后更改列的名称。但我不能创建一个@i变量并说选择PlanSalesMt @ 1或PlanSalesMt + @ 1或PlanSalesMt + CAST(@ 1作为varchar),因为它表示无效的列名称。
答案 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并运行它,您将看到它产生的查询。