DECLARE @newcolumns VARCHAR(2000);
WITH cte AS
(
SELECT
REPLACE(REPLACE(DateOut, ']', ''), '[', '') DateOut
FROM
#Columns
)
SELECT
@newcolumns = COALESCE(@newcolumns + ',' + '[' + DateOut + '] REAL',
'[' + DateOut + '] REAL')
FROM
cte
CREATE TABLE #newtable
(
Area NVARCHAR(50),
EqpType NVARCHAR(50),
@newcolumns
)
我有这个代码,变量@newcolumns
会返回类似
[dec-1] real, [dec-2] real, [dec-3] real
我尝试使用另一个这样的变量:
DECLARE @sql VARCHAR(4000)
SET @sql = '
CREATE TABLE #newtable
(
Area NVARCHAR(50),
EqpType NVARCHAR(50), ' + @newcolumns + ')
INSERT INTO #newtable
SELECT Area,EqpType,'+@listMAX+'
FROM #littletable
PIVOT (MAX(Metric) FOR DateOut IN ('+@list+')) Z
GROUP BY Area,EqpType
ORDER BY AREA' EXEC (@sql)
这确实很好,但有没有办法在不使用其他变量的情况下做同样的事情?喜欢@sql
?
答案 0 :(得分:1)
不,没有。要为列名使用变量,必须使用动态sql,这是您使用@sql
变量所做的。