使用varchar变量声明表的列

时间:2017-12-06 19:21:24

标签: sql sql-server sql-server-2008 sql-server-2016

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

1 个答案:

答案 0 :(得分:1)

不,没有。要为列名使用变量,必须使用动态sql,这是您使用@sql变量所做的。